Chrome如何设定webdriver=undefined以避免Selenium检测?

Posted bgmc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chrome如何设定webdriver=undefined以避免Selenium检测?相关的知识,希望对你有一定的参考价值。

Chrome如何设定webdriver=undefined以避免Selenium检测?

一、WebDriver规范

根据WebDriver规范(https://w3c.github.io/webdriver/#x4-interface)的描述,WebDriver定义了一个标准方法,以便于文档(document)判断当前浏览器处于自动化控制之中。

这个方法就是检测window.navigator.webdriver的值,正常情况下其值为undefined,自动化控制下为true。注意,正常情况下不是false,在javascriptundefined为未定义,即该值不存在,而false表示一布尔值。

附上规范原文:

The webdriver-active flag is set to true when the user agent is under remote control. It is initially false.

Defines a standard way for co-operating user agents to inform the document that it is controlled by WebDriver, for example so that alternate code paths can be triggered during automation.

二、突破

ChromeDriver的设计符合这一规范,如何突破

旧版本

版本79.0.3945.16之前,可用如下方法:

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)

driver = webdriver.Chrome(options=options)
driver.get("YOUR_URL")
# 在控制台中验证window.navigator.webdriver的值为undefined。
driver.quit()

新版本

版本79.0.3945.16之后,ChromeDriver修正了这一“问题”。

根据注记原文:

Resolved issue 3133: window.navigator.webdriver is undefined when "enable-automation" is excluded in non-headless mode (should be true) [Pri-2]

如何突破

execute_cdp_cmd函数来帮忙!cdp即Chrome DevTools Protocal,Chrome开发者工具协议。

通过该函数在文档加载前注入一段js代码以消去webdriver值。

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from selenium import webdriver

driver = webdriver.Chrome()
script = '''
Object.defineProperty(navigator, 'webdriver', {
    get: () => undefined
})
'''
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script})
driver.get("YOUR_URL")
# 在控制台中验证window.navigator.webdriver的值为undefined。
driver.quit()

以上是关于Chrome如何设定webdriver=undefined以避免Selenium检测?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium WebDriver 在新选项卡(chrome)中打开链接?

如何在 Chrome 中运行 Selenium WebDriver 测试用例

如何使用 webDriver (python) 在 chrome 中最大化窗口

如何在 Selenium Webdriver Python 3 中使用 Chrome 配置文件

如何在 python 中的 selenium webdriver 中禁用 chrome 通知弹出窗口

如何使用C#中的Selenium Webdriver使用Chrome浏览器的Cookie?