加载页面后,Selenium find_element_by_id失败

时间:2018-10-08 11:37:47

标签: python-3.x selenium selenium-webdriver webdriver

这是一个简单的例子:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.dcor.state.ga.us/GDC/Offender/Query")
button = driver.find_element_by_id('submit2')

无论我等待多长时间(与先前的问题和答案不同-页面加载后很长一段时间),最后一个命令都会失败,但是当我进入浏览器本身(Selenium创建的实例)时,绿色的“我同意”按钮的ID为Submit2(右键单击->检查元素)...

是什么原因导致这种现象?

我如何使其工作?

2 个答案:

答案 0 :(得分:1)

这是因为表单位于iframe内,因此您需要在定位元素之前切换到该框架:

driver.switch_to.frame('iframe-content')

答案 1 :(得分:0)

所需元素位于<iframe>中,因此您需要:

  • 诱导 WebDriverWait 使所需的框架可用并切换到该框架。
  • 诱使 WebDriverWait 使其可单击,然后可以使用以下解决方案:
  • 代码块:

    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframe-content")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.oq-sub.btn.btn-success#submit2"))).click()