我很遗憾无法发布代码来重现此问题,因为它涉及登录到不是公共站点的站点.但我的问题比代码问题更普遍.实质上,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>
Run Code Online (Sandbox Code Playgroud)
然而,我需要所有4个输入元素,hdn_partyId
并且hdn_sessionId
元素不会出现在selenium中.page_source
,如果我尝试使用它们,.find_element_by_[...]
我会得到一个NoSuchElementException
我甚至检查了所有input
元素并列出它们,并且这两个元素都没有显示出来.
有没有人知道为什么selenium不会提供与直接查看它正在驱动的浏览器相同的内容?
编辑:澄清......我正在通过Selenium驾驶Chrome与Chromedriver.这不是页面未完全加载的问题.正如我所提到的,我通过python终端逐行手动运行,而不是执行脚本.所以浏览器弹出,加载页面,登录,然后我手动检查浏览器的页面源并看到元素,然后我print driver.page_source
和它不在那里,如果我运行session_id = driver.find_element_by_id('hdn_sessionId')
我得到一个NoSuchElementException
.页面中根本没有框架,也没有任何其他窗口.
我的一位同事已经解决了这个问题和解决方法。本质上,页面加载完成后,它会运行一个 javascript 命令来清理 DOM。浏览器中的“查看页面源代码”显示的不是当前状态。因此,运行print driver.page_source
或使用任何形式的driver.find_element_by_[...]
都是从最新和最新的页面数据中提取,而浏览器的“查看页面源”仅显示页面首次加载时提供的内容。如果您开始在 Chrome 中“检查”页面,您将看到 HTML 与浏览器所说的“页面源”不同。在对 Javascript 进行逆向工程之后,我们能够运行partyid = driver.execute_script('return accountdata.$partyId.val();')
并获得最初分配的内容。我希望这些信息足以帮助将来可能遇到此问题的其他人。
小智 6
尝试这样,您将获得源代码关键字“view-source:”,根据您的浏览器,它可能会有所不同,这是针对 chrome 的
driver.get("view-source:"+url)
sourcecode=driver.find_element_by_tag_name('body').text
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3093 次 |
最近记录: |