gpt4 book ai didi

python - Selenium - 在检查 HTML 之前找不到可见元素?

转载 作者:行者123 更新时间:2023-12-01 08:53:30 25 4
gpt4 key购买 nike

我目前正在使用 Selenium 进行网络爬虫应用程序,在几个成功的模块之后,以下情况让我陷入困境:我试图找到“菜单”类的一个元素,其中包含文本“报告”名为“frame_applic”的框架。

非常简单,对吧?应该很简单:

browser = webdriver.Chrome()
#Do the necessary crawling to get to this specific menu...

browser.switch_to_frame('frame_applic')
for obj in browser.find_elements_by_class_name('menu'):
if obj.text == 'Reports':
bt_reports = obj
break

#The variable bt_reports should be the one requested.

这里是有趣的地方:虽然当我尝试切换到所需的框架时没有引发错误,但没有找到类名“menu”的元素。我肯定拼错了框架或类名,对吧?因此,在决定检查 HTML 并且不进行任何其他更改后,元素就在那里,就好像仅查看网页源代码的行为就改变了结果。这里可能发生什么?

我不允许发布完整的 HTML,但以下结构包含了该问题:

<html>
<head>
<TITLE>Page</TITLE>
</head>
<frameset ...>
<frame name="frame_menu" src="https:..." >
<frame name="frame_applic" src="menu.asp?...">
#document
<table width="100%" border="0" cellpadding="5" cellspacing="0">

<tr>
<td colspan="2" align="right">
<table width="95%" border="0" cellpadding="5" cellspacing="0">

<tr><td><a href="https:..." class="menu">Reports</a></td></tr>
<tr><td><a href="https:..." class="menu">Change Password</a></td></tr>
<tr><td><a href="https:..." class="menu">Change Secret Phrase</a></td></tr>
</table>
</td>
</tr>
</table>
</body>

<frame name="frame_bottom" src="https:...">
</frameset>
</html>

最佳答案

经过仔细检查,我发现根本问题是所需框架的源信息位于 Active Server Page (asp) 中,如下所示:

<frame name="frame_applic" src="menu.asp?..."> 

并且无法从我所在的页面直接访问它。检查浏览器上的元素的行为显然会强制这些元素在 webdriver 实例中共存,从而允许我获取框架内的元素,而它们以前是无法访问的。

我能够通过首先找到请求的帧,然后将网络驱动程序指向它的源来解决这个问题,方法是:

browser.get(browser.find_element_by_xpath("//frame[@name='frame_applic']")\
.get_attribute('src'))

然后像我之前那样简单地获取元素:

menu_list = browser.find_elements_by_class_name('menu')

关于python - Selenium - 在检查 HTML 之前找不到可见元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52948943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com