gpt4 book ai didi

python - Selenium 中的 iFrame 问题

转载 作者:太空狗 更新时间:2023-10-30 03:07:04 25 4
gpt4 key购买 nike

我正在尝试使用几乎完全是 Javascript 的 Selenium(在 Python 中)抓取网页。
例如,这是页面的主体:

<body class="bodyLoading">
<!-- this is required for GWT history support -->
<iframe id="__gwt_historyFrame" role="presentation" width="0" height="0" tabindex="-1" title="empty" style="position:absolute;width:0;height:0;border:0" src="javascript:''"> </iframe>
<!-- For printing window contents -->
<iframe id="__printingFrame" role="presentation" width="0" height="0" tabindex="-1" title="empty" style="width:0;height:0;border:0;" />


<!-- TODO : RECOMMENDED if your web app will not function without JavaScript enabled -->
<noscript>
<div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
Your web browser must have JavaScript enabled in order for
Regulations.gov to display correctly.
</div>
</noscript>
</body>

出于某种原因,selenium(使用 Firefox 引擎)不会评估此页面上的 javascript。如果我使用 get_html_source 函数,它只会返回上面的 html,而不是我可以在浏览器(和 Selenium 浏览器)中看到的 JavaScript 导入的 HTML。而且,不幸的是,我无法弄清楚 iFrame 中的 src 属性只是说 javascript: 我无法弄清楚。

关于如何确保 Selenium 处理此 iFrame 的任何想法?

最佳答案

iframe 是单独的文档,因此您不会将它们的内容包含在主页的 HTML 代码中;你必须单独阅读它们。

您可以使用 Selenium 的 select_frame 函数执行此操作。

与其他元素一样,您可以通过名称、CSS 选择器、xpath 引用等访问框架。

当您选择框架时,您会更改 Selenium 的上下文,这样您就可以像访问当前页面一样访问框架的内容。

如果框架中有框架,则可以通过框架树继续此过程。

显然,您需要一种返回框架路径的方法。 Selenium 通过允许您使用相同的 select_frame 函数提供此功能,并使用 relative=up 参数将上下文移动到当前框架的父级,或者 relative=top 移动到浏览器的主页。

因此,使用此功能,您可以在页面框架中导航。

您不能同时访问它们;一次只能有一个框架位于上下文中,因此您永远无法进行一次 get_html_source 调用并一次获取所有框架的内容,但您可以在页面中的框架内导航您的 Selenium 脚本并分别获取每个框架的 HTML 源代码。

希望对您有所帮助。

关于python - Selenium 中的 iFrame 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6363966/

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