Python 3.x 加载页面后,Selenium按\u id查找\u元素\u失败
下面是一个简单的例子:Python 3.x 加载页面后,Selenium按\u id查找\u元素\u失败,python-3.x,selenium,selenium-webdriver,webdriver,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创建的实
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(右键单击->检查元素)
是什么导致了这种行为
如何使其工作?这是因为表单位于iframe中,所以在定位元素之前需要切换到该框架:
driver.switch_to.frame('iframe-content')
所需元素位于
中,因此您需要:
- 诱导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()
为什么OP需要导入WebDriverWait以获得所需的帧并切换到它?有什么理由等待静态节点吗?谢谢!在哪里可以了解有关模拟用户动作的更多信息?例如,现在我发现(在同一个网页上)调用“click”方法实际上不起作用,除非我在浏览器上手动向下滚动它自己检查我发现了两个关于在Selenium中滚动的问题,两个方法都不起作用。。。下面是代码:driver=webdriver.Firefox()driver.get(“)driver.switch_to.frame('iframe-content')#driver.execute_script('window.scrollTo(0,document.body.scrollHeight);)button=driver.find_element_by_id('submit2')actions=ActionChains(driver)actions.move_to_to_element(button.perform())button.click()您想滚动到Submit2按钮吗?每种方法都可能适用于特定的情况,在另一种情况下可能不起作用。而StackOverflow是您成为Selenium guru所需要的全部:)