刷新DOM,以便Selenium Web Driver可以找到元素

时间:2018-10-21 00:45:56

标签: python selenium dom selenium-chromedriver

我正在尝试使用Selenium的Chrome网络驱动程序导航到页面,然后填写表格。问题是页面加载,然后5秒钟后显示表单。因此,JavaScript会在5秒钟后更改DOM。我认为这意味着表单的html ID在Web驱动程序接收的源代码中不存在。

这是带有Chrome的检查功能的表单: page element

但是该html不会出现在页面的源html中。

用于查找元素的Python:

answerBox = driver.find_element_by_xpath("//form[@id='answer0problem2']")

我将如何访问此表单中的输入字段?

是否可以在不更改页面的情况下刷新Web驱动程序?

1 个答案:

答案 0 :(得分:0)

您遇到了这个问题,因为您没有给网站足够的时间来加载。

像这样使用time.sleep()

import time
driver.get('http://your.website.com')
time.sleep(15)

plain_text = driver.page_source
soup = BeautifulSoup(plain_text, 'lxml')

之所以有效,是因为硒产生了它自己的过程,并且不受python sleep的影响。在这段睡眠时间内,无头浏览器会继续运行并加载网站。

为每个硒执行实现sleep时间以解决页面加载问题很有帮助。因为python进程与selenium通讯的唯一方法是在您调用driver时进行,所以在页面加载之前进行调用会产生与您所描述的类似的结果。