NoSuchElementException:メッセージ:no such element:要素を見つけようとしたときに、要素が見つからない

Seleniumを使用してPythonでGoogle Chromeセッションを自動化しようとしています。今まで私はエクステンションを使ってxpathを取得してきましたが、これで問題ありません。しかし今、私は私が見つけたxpathを使用しているときにエラーに遭遇します。

NoSuchElementException:メッセージ:そのような要素はありません:要素を見つけることができません:{"method": "xpath"、 "selector": "// * [@ id =" ok "]"}     (セッション情報:chrome = 71.0.3578.98)     (ドライバ情報:chromedriver = 2.45.615291(ec3682e3c9061c10f26ea9e5cdcf3c53f3f74387)、プラットフォーム= Windows NT 6.3.9600 x86_64)

エラーを返す行は次のようになります。

browser.find_element_by_xpath('//*[@id="ok"]').click()

残念ながら、私がクリックする必要があるボタンはウェブページの中でかなり深く、そしてあなたが私のプログラムの流れを複製することを難しくする特定のプラグインを必要とします。したがって、私はWebページのソースコードの画像をアップロードしました(青い線は私がクリックしたいボタンです):

enter image description here

私が元素をクリックできるように、セレニウムセレクターを修正する方法について何か手助けをしていただけませんか。

0

4 答え

To click() on the desired element as the the desired element is within an <iframe> so you have to:

  • Induce WebDriverWait for the desired frame to be available and switch to it.
  • Induce WebDriverWait for the desired element to be clickable.
  • You can use the following solution:

    • Code Block (using CSS_SELECTOR):

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe#codefile_iframe")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#ok[value='OK'][onclick^='loginui']"))).click()
      
    • Code Block (using XPATH):

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='codefile_iframe']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='ok' and @value='OK'][starts-with(@onclick,'loginui')]"))).click()
      
0
追加された

ターゲットボタンとして iframe 内にある場合は、そのフレームを処理せずにフォームを送信する必要があります。

browser.find_element_by_id('signedForm').submit()
0
追加された

WebDriverWait を使用してください。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome('/path/to/chromedriver')
wait = WebDriverWait(driver, 10)
okButton = wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="ok"]')))
okButton.click()

これがお役に立てば幸いです。

0
追加された

内部の要素と対話する前に、iframeに切り替える必要があります。

iframe = driver.find_element_by_id("codefile_iframe")    
driver.switch_to.frame(iframe)

そして、そのまま待機してクリックします。

0
追加された