首先更新 1
execute_cdp_cmd()
:随着命令的可用性,现在您可以使用Selenium轻松执行google-chrome-devtools命令。使用此功能,您可以轻松修改,以防止硒被检测到。execute_cdp_cmd(cmd, cmd_args)
navigator.webdriver
防止检测 2
为了防止硒驱动的WebDriver被检测到,利基方法将包括以下所有提到的步骤之一/ 所有步骤:
-
添加参数 --disable-blink-features=AutomationControlled
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get("https://www.website.com")
你可以在硒找不到第二页找到相关的详细讨论
-
通过命令轮换用户代理,如下所示:execute_cdp_cmd()
#Setting up Chrome/83.0.4103.53 as useragent
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
-
将 Web 驱动程序的导航器
的属性值更改为未定义
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
-
排除交换机集合enable-automation
options.add_experimental_option("excludeSwitches", ["enable-automation"])
-
关断useAutomationExtension
options.add_experimental_option('useAutomationExtension', False)
示例代码 3
将上面提到的所有步骤和有效的代码块组合在一起将是:
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, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
print(driver.execute_script("return navigator.userAgent;"))
driver.get('https://www.httpbin.org/headers')
历史
根据W3C编辑的草案,当前的实现严格提到:
当用户代理处于远程控制之下时,Webdriver 活动
标志设置为 true
,该标志最初设置为 false
。
进一步
Navigator includes NavigatorAutomationInformation;
需要指出的是:
该接口不应在 WorkerNavigator 上公开。NavigatorAutomationInformation
接口定义为:NavigatorAutomationInformation
interface mixin NavigatorAutomationInformation {
readonly attribute boolean webdriver;
};
如果设置了标志,则返回 true
,否则返回 false。webdriver-active
最后,为合作用户代理定义了一种标准方式,以通知文档它由 WebDriver 控制,以便在自动化过程中可以触发备用代码路径。navigator.webdriver
警告: 更改/调整上述参数可能会阻止导航并检测到 WebDriver 实例。
更新 (6-十一月-2019)
从当前实现开始,在不被检测到的情况下访问网页的理想方法是使用该类向以下对象添加几个参数:ChromeOptions()
- 排除交换机集合
enable-automation
- 关断
useAutomationExtension
通过如下实例:ChromeOptions
-
Java 示例:
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
options.setExperimentalOption("useAutomationExtension", false);
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.google.com/");
-
Python 示例
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
driver.get("https://www.google.com/")
-
红宝石示例
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument("--disable-blink-features=AutomationControlled")
driver = Selenium::WebDriver.for :chrome, options: options
传说
1:仅适用于Selenium的Python客户端。
2:仅适用于Selenium的Python客户端。
3:仅适用于Selenium的Python客户端。