【发布时间】:2017-07-21 20:31:41
【问题描述】:
很遗憾,我无法发布代码来重现此问题,因为它涉及登录非公共站点的站点。但我的问题比代码问题更笼统。本质上,driver.page_source 与它正在驱动的浏览器中显示的内容不匹配。这不是元素未完全加载的问题,因为我在 python 终端中逐行执行代码时正在测试它。右键单击并转到“查看页面源”后,我正在浏览器中查看页面源,但如果我打印driver.page_source 或尝试find_element_by_[...],它显示的代码略有不同,缺少整个元素。这是有问题的html:
<nav role="navigation" class="utility-nav__wrapper--right">
<input id="hdn_partyId" value="1965629" type="hidden">
<input id="hdn_firstName" value="CHARLES" type="hidden">
<input id="hdn_sessionId" value="uHxQhlARvzA7N16uh+KJAdNFIcY6D8f9ornqoPQ" type="hidden">
<input id="hdn_cmsAlertRequest" type="hidden" value="Biennial Plus">
<ul class="h-list h-list--middle">
[...]
</ul>
我需要所有 4 个输入元素,但是,hdn_partyId 和 hdn_sessionId 元素不会出现在 selenium 的 .page_source 中,如果我尝试使用 .find_element_by_[...] 获取它们,我会得到 NoSuchElementException
我什至检查了所有 input 元素并列出它们,这两个没有出现。
有人知道为什么 selenium 不会提供与直接查看它所驱动的浏览器相同的内容吗?
编辑:澄清...我正在通过 Selenium 使用 Chromedriver 驱动 Chrome。这不是页面未完全加载的问题。正如我所提到的,我通过 python 终端逐行手动运行,而不是执行脚本。所以浏览器弹出,加载页面,登录,然后我手动检查浏览器的页面源并查看元素,然后我 print driver.page_source 它不存在,如果我运行 session_id = driver.find_element_by_id('hdn_sessionId') 我得到一个 NoSuchElementException .页面中也没有任何框架,也没有任何额外的窗口。
【问题讨论】:
-
在尝试获取源之前,您是否尝试使用显式等待功能?
-
您是否尝试使用 Chromedriver 并注意页面是否完全加载?并检查其源代码?
-
我不相信
driver.page_source会检索 JavaScript 生成的任何 DOM 元素。 -
我没有尝试使用显式等待,因为这不是页面加载完全的问题。这是我在 python 终端中执行代码的地方。我正在使用 selenium 来驱动 Chrome。所以页面加载完毕,我看了一下,右键,查看页面源码,查看元素,然后
print driver.page_source这些元素都不存在了。 -
您的意思是您在页面完全呈现后从 Python 控制台尝试了
find_element_...(),并且只能找到 4 个输入中的 2 个?附言忽略driver.page_source