【发布时间】:2018-07-24 12:58:29
【问题描述】:
所以我正在尝试使用 selenium 自动完成某些表单,但我遇到了一个问题。我使用的其中一种表单不是由 HTML 立即加载的,而是在页面正常加载后使用 JavaScript 加载的。无论出于何种原因,在 javascript 中加载后,selenium 都无法看到页面的更新源。例如,如果我运行以下代码。
browser = webdriver.Firefox()
browser.get('https://examplepage.com')
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.ID, “13jres”))).send_keys(“email@email.com”)
什么都没有发生,它会超时。在做了一些测试后,我注意到如果我在 python 中打印源代码,使用以下代码
browser = webdriver.Firefox()
browser.get('https://examplepage.com')
time.sleep(20)
print browser.page_source
然后源代码与我可以在 selenium firefox 实例中手动查看的源代码不同。因此,根据 selenium 源输出,我试图输入的以下行不存在,即使在 Firefox 中检查元素或在 Firefox 实例中查看已加载内容的源时它明显存在使用硒。
<input label=“Email” type="text" name="13jres" id="13jres" class="text-field”>(shortened to make it more readable)
阅读一些文档时,我在引用 page_source 命令时发现了这个花絮,我猜这解释了源代码的差异,但我仍然不清楚如何缓解在页面上查找这些元素的问题。我在 selenium 中尝试过其他浏览器(safari、chrome 等),但除此之外,我不确定我需要做什么。
“如果页面在加载后被修改(例如,通过 Javascript),则不能保证返回的文本就是修改后页面的文本。请查阅正在使用的特定驱动程序的文档,以确定返回的文本是反映页面的当前状态还是 Web 服务器上次发送的文本。”
【问题讨论】:
-
你睡了 20 秒后,
find_element_by_id("13jres")返回什么?在 Firefox 控制台中,document.getElementById("13jres")返回什么? -
页面加载时是否调用了javascript?
-
试试这个
EC.visibility_of_element_located((By.ID, “13jres”))。
标签: javascript python html selenium