# -*- encoding:utf-8 -*- ''' @Author : dingjiawen @Date : 2023/12/6 21:20 @Usage : 反屏蔽 @Desc : 现在很多网站增加了对Selenium的监测,如果检测到Selenium打开浏览器就直接屏蔽 基本原理是监测当前浏览器窗口下的window.navigator对象中是否包含webdriver属性。 正常使用浏览器这个属性应该是undefined,一旦使用了Selenium,就会给window.navigator设置webdriver属性 https://antispider1.scrape.center/ 就是使用了上述原理 ''' from selenium import webdriver from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) browser = webdriver.Chrome(options=option) # 无效,因为这是页面加载完毕之后才执行,但是页面渲染之前已经检测了 browser.execute_script('Object.defineProperty(navigator, "webdriver", {get: () => undefined})') browser.get('https://antispider1.scrape.center/') # 使用CDP(chrome开发工具协议)解决这个问题,在每个页面刚加载的时候就执行JavaScript语句,将webdriver置空 option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) option.add_experimental_option('useAutomationExtension', False) browser = webdriver.Chrome(options=option) browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', { 'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})' }) browser.get('https://antispider1.scrape.cuiqingcai.com/')