Chrome设定webdriver以避免Selenium检测
一、WebDriver规范
根据WebDriver规范(https://w3c.github.io/webdriver/#x4-interface)的描述,WebDriver定义了一个标准方法,以便于文档(document)判断当前浏览器处于自动化控制之中。
这个方法就是检测window.navigator.webdriver的值,正常情况下其值为undefined
,自动化控制下为true
。注意,正常情况下不是false
,在JavaScript中undefined
为未定义,即该值不存在,而false
表示一布尔值。
在版本79.0.3945.16
之前,可用如下方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #!/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修正了这一“问题”。
execute_cdp_cmd函数来帮忙!cdp即Chrome DevTools Protocal,Chrome开发者工具协议。
通过该函数在文档加载前注入一段js代码以消去webdriver值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/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() |
附上火狐浏览器解决方案(80版本测试有效)
1 2 3 4 5 6 7 8 9 10 | from selenium import webdriver import time profile = webdriver.FirefoxProfile() profile.set_preference( "dom.webdriver.enabled" , False ) profile.set_preference( 'useAutomationExtension' , False ) profile.update_preferences() driver = webdriver.Firefox(firefox_profile = profile) driver.get( 'https://login.aol.com' ) driver.maximize_window() |
浏览器控制台检测
Object.defineProperties(navigator,{webdriver:{get:()=>undefined}})
Object.defineProperties(navigator,{webdriver:{get:()=>false}})
window.navigator.webdriver
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix