Selenium w/Firefox 88 更改为 navigator.webdriver

Posted

技术标签:

【中文标题】Selenium w/Firefox 88 更改为 navigator.webdriver【英文标题】:Selenium w/ Firefox 88 changes to navigator.webdriver 【发布时间】:2021-07-23 04:23:12 【问题描述】:

最新版本的 Firefox 88 包含一个 bug fix,如果浏览器通过 marionette 协议运行,则用户无法将 navigator.webdriver 属性设置为 false。不幸的是,如果网站使用像 Cloudflare 的 DDOS 保护这样的服务来检查远程浏览器上的该属性并陷入无限循环而不是重定向到请求的页面,这实际上会使一些网络抓取活动变得不可能。

现在有没有人知道一种替代方法,比如

profile.set_preference("dom.webdriver.enabled", False)

profile.set_preference("useAutomationExtension", False)

现在没有效果了?

具体来说,我将 Selenium 与 Python 绑定一起使用,但我认为使用任何框架的解决方法都可以适应我的情况。

【问题讨论】:

您使用的是哪个版本的 FirefoxDriver?如果您尚未升级 FirefoxDriver,请执行此操作并重试。由于他们修补了 Firefox,他们可能还修补了 FirefoxDriver for Selenium。 @GregBurghardt 我正在使用 GeckoDriver v0.29.1,我认为它是最新的 嘿,Firefox 88 也有问题。selenium 实例不再加载以下网站。有那个。与您上面提到的问题有关吗? ebay-kleinanzeigen.de/m-einloggen.html @soitgoes 如果您找到了解决方案,您介意发布吗? @JeffSahol 我找不到任何优雅的解决方案。最终我最终遵循了本指南here,然后对 FF 88 源代码进行了必要的编辑并构建了我自己的二进制文件 【参考方案1】:

我尝试在加载任何其他脚本之前向 Firefox 添加扩展,该扩展会覆盖 navigator.webdriver。似乎它不仅与 navigator.webdriver 有关,还与其他一些东西有关。

我在 document_start 上执行了以下代码

script = document.createElement("script"); script.type = 'text/javascript'; script.id = "scripttttttt"; script.innerHTML = "Object.defineProperty(navigator, 'webdriver', get: () => undefined);document.getElementById('scripttttttt').remove();"; document.documentElement.prepend(script);

这足以打开https://ebay-kleinanzeigen.de/m-einloggen.html,但不足以登录谷歌帐户。

【讨论】:

在查看为该 URL 加载的所有资源时,我无法找到对 navigator.webdriver 的任何明确引用,但对其他系统/环境统计信息进行了多项检查,可用于检测 webdriver 的使用情况比如 CPU 统计数据、屏幕大小、接触点数量、可用插件等。【参考方案2】:

您可以停止将 Firefox 更新到版本 88。为此,请执行以下任务。

    如果已更新/安装,请删除 firefox 88 版。

    sudo apt-get purge firefox

    删除 firefox 配置文件(如果仍然存在)。

    rm -rf ~/.mozilla/

    从缓存中搜索 firefox 旧版本。

    apt-cache 显示 firefox | grep 版本

    安装 88 以外的所需版本。

    sudo apt-get install firefox=desiredversion

    例如:

    sudo apt-get install firefox=75.0+build3-0ubuntu1

    在以下位置创建一个文件 policies.json:/usr/lib/firefox/distribution。这将停止强制更新到版本 88。

    
    "policies": 
        "AppUpdateURL": "http://127.0.0.1/",
        "DisableAppUpdate": true,
        "DisableFirefoxStudies": true,
        "DisableSystemAddonUpdate": true,
        "DisableTelemetry": true,
        "ExtensionUpdate": false
    
    

    打开 Firefox 转到 about:config 并点击 我接受风险! 或任何显示的内容。

    搜索app.update.auto 并将其切换为False

    最后检查版本确认。

【讨论】:

以上是关于Selenium w/Firefox 88 更改为 navigator.webdriver的主要内容,如果未能解决你的问题,请参考以下文章

在 Python/Selenium 中将焦点更改为新窗口

如何将汉堡菜单更改为常规菜单?

selenium+python自动化88-用例不通过的时候发送邮件

Selenium 等待 HTML 元素更改

XAMPP 和 WebMatrix

将float 1.88转换为字符串HH:MM