【问题标题】:Removing a part of HTML before loading a page in WebDriver - Selenium & Python在 WebDriver 中加载页面之前删除部分 HTML - Selenium 和 Python
【发布时间】:2017-02-02 00:25:57
【问题描述】:

我有一个脚本(在<script></script> 标签内),每次加载页面时都会执行该脚本。是否可以在 WebDriver 中加载页面之前删除 WebElement 以防止该脚本执行?


我正在考虑以下内容:

以某种方式获取原始 HTML 代码(可能获取源代码或其他东西),删除部分(使用 selenium 或解析器),将编辑后的代码“注入”回 Selenium(Firefox WebDriver 或可能是 PhantomJS)最后对该网站上的所有页面执行它。

是否有可能做到这一点,或者这可能是设计上不可能的?

【问题讨论】:

  • 您可以访问原始 HTML 吗?
  • 我不知道你说的原创是什么意思。但我可以在网站上看到什么。我可以使用像 driver.find_element_by_tag_name().get_attribute('outerHTML') 这样的适当方法将该 html 保存为字符串(如果我没记错的话,我现在不在我的主计算机上。但是因为我正在尝试不运行该脚本并且不加载该页面是无用的,因为我找不到一个元素,因此在不加载页面的情况下获取原始 html 数据。
  • Selenium 将发出请求,您可能会在页面已经加载(并且脚本运行)之后执行所有操作。你可以做的(它不会很漂亮,但是......),是为你正在运行测试的浏览器(例如 FF 或 Chrome)创建一个补充,以删除这个 URL 的这个脚本,然后保存一个配置文件其中。这个配置文件可以在开始测试时指出,什么会阻止脚本运行。
  • @Tom 谢谢你的回复,汤姆。所以我基本上应该按原样运行代码,通过调用特定方法删除元素,然后以某种方式保存浏览器状态?您能否告诉我应该在 Internet 上查找哪些信息才能使该解决方案成为可能?
  • @Clone,您可以尝试为您的浏览器编写一个简单的扩展程序来“删除”该

标签: python selenium selenium-webdriver selenium-ide selenium-firefoxdriver


【解决方案1】:

如果您安装selenium-requests,您可以对页面发出GET请求,处理加载的html/etc,然后然后放置在选项卡中。

插入处理后的结果可能会很棘手,因为您可能还需要设置当前浏览器 URL 以匹配(只需插入它会导致跨域加载脚本、相对路径等问题) - 也许有一种覆盖(或允许覆盖)硒接收到的带有预处理信息的“获取”响应的方法

Selenium-Requests 使用 requests 库发出请求,该库使用该域的运行 webdriver cookie 并模拟该 webdriver 发送的默认 HTTP 标头。结果是使用 webdriver 的状态创建的低级 HTTP 请求和响应。这是必需的,因为 Selenium 接口是非常高级的,而且在 Python 中,除了打开页面和探索 DOM 之外,它还不能做更多的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多