【问题标题】:Selenium find element with document.writeSelenium 使用 document.write 查找元素
【发布时间】:2019-02-20 08:14:54
【问题描述】:

我正在尝试使用 selenium 和 python 在网页上运行一些自动脚本,但我遇到的问题是网页是使用 document.write() 加载的。 我必须找到一些元素,但它们没有显示,因为当我查看源代码时,它显示为 document.write(A lot of JS) 而不是 html。

如何才能查看 HTML 源代码?我知道有函数driver.execute_script(),但是我必须指定要运行的脚本,我认为它不会起作用。 页面已正确呈现,唯一的问题是无法解析源。

【问题讨论】:

  • "我必须找到一些元素,但它们没有显示,因为当我查看源代码时,它显示为 document.write(A lot of JS) 而不是 html。" 你的意思是当 查看源代码或 Selenium 进入页面时会发生这种情况?如果想查看当前代码,那么你应该使用开发者工具(通常是 F12)而不是在浏览器中打开页面源代码。如果 Selenium 将页面作为一堆未执行的 JS 获取,那么它可能执行得太快了,您需要等待它正确呈现。
  • webdriver 确实显示了正确的页面,但 driver.page_source 显示了 document.write()。当我用浏览器查看源代码时,它还会向我显示 document.write() 代码,所以我想说这不是我必须等待的问题,它就是它的工作原理,源代码包含 JS document.write,但问题是它是呈现它的浏览器。
  • 我只在 Java 中使用过 Selenium,所以我不确定 driver.page_source 是否也在其中,但我认为你不应该使用它。通常,您会通过驱动程序抓取一个页面并指示驱动程序为您查找元素。 Selenium 应该在内部使用呈现的页面。浏览器中的页面源(我怀疑它与驱动程序相同)在许多情况下是您最初作为页面代码得到的,之前浏览器将其解释为页面,因此在任何可能操纵 DOM 的 JS 执行之前。浏览器中的开发工具会显示当前状态。
  • 我用 selenium 搜索了输入框(findbyid,findbyname,所有可能性),但它找不到该框,虽然它被正确渲染,所以我的猜测是它在源代码预渲染,而不是后渲染,正如你所建议的(我希望它会)。但似乎 selenium 没有使用开发工具,而是使用源代码......无论如何感谢您的回复!
  • 这很奇怪,但它似乎与您发现的一致。我从未使用过 Selenium 的 Python 版本,所以我不确定这是否是问题所在。虽然如果有的话,我会怀疑网络驱动程序。作为一种猜测 - 尝试将驱动程序换成不同的。还是更新它?不知道。

标签: javascript python selenium-webdriver document.write


【解决方案1】:

在深入研究代码后发现,Selenium 在渲染的最终视图中进行搜索,但问题不在于 document.write(),而是我要查找的字段位于 iframe 中, selenium 在默认帧上找不到。

我所要做的就是搜索 iframe 并找到我需要的那些。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2013-02-01
    相关资源
    最近更新 更多