通过 Selenium 和 Chrome 实现日常网站功能自动化时,Selenium 检测提出了重大挑战。一些网站会主动检查 Selenium 驱动的浏览器,从而阻止某些请求。通常,它们依赖暴露的 DOM 变量(如 navigator.webdriver)来检测此类实例。
要阻止这种检测机制,请考虑采用以下预防措施:
修改您的 Selenium 脚本以将特定参数注入 Chrome 实例。这包括:
禁用“AutomationControlled”标志:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--disable-blink-features=AutomationControlled') driver = webdriver.Chrome(options=options, executable_path=path_to_driver)
设置自定义用户代理:
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Your_Custom_User_Agent'})
将 navigator.webdriver 设置为未定义:
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
排除自动化开关:
options.add_experimental_option("excludeSwitches", ["enable-automation"])
禁用自动化扩展名:
options.add_experimental_option('useAutomationExtension', False)
结合这些措施,这里是一个全面的代码片段:
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=path_to_driver) driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})") driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Your_Custom_User_Agent'}) print(driver.execute_script("return navigator.userAgent;")) driver.get('https://www.httpbin.org/headers')
请务必小心,因为这些修改可能会干扰导航并可能导致检测。
以上是如何通过修改 Navigator.webdriver 标志来防止 Selenium 检测?的详细内容。更多信息请关注PHP中文网其他相关文章!