赞
踩
selenium一般有以下几种检测方式
使用chromedriver有很多特征,最明显的是window.navigator.webdriver,针对
window.navigator.webdriver我们可以使用execute_cdp_cmd
# 修改 webdriver 值
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
})
但是使用该方式只能屏蔽webdriver的值,还有很多特征无法处理,因此推荐使用stealth.min.js 隐藏chromedirver特征的内容。stealth.min.js是puppeteer中用于抹去自动化程序特征的。当他被单独提取出来后就可以在selenium中加载并使用,使得可以抹掉selenium中的自动化特征,从而绕过一些网站或者验证程序的机器人检测。
使用方法如下:下载地址见https://github.com/berstend/puppeteer-extra/tree/master/packages/extract-stealth-evasions或者直接使用https://cdn.jsdelivr.net/gh/requireCool/stealth.min.js/stealth.min.js
with open('stealth.min.js') as f:
js = f.read()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": js
})
options.add_argument(“–disable-blink-features”)
options.add_argument(“–disable-blink-features=AutomationControlled”)
notepad打开chromedriver.exe,搜索"cdc_"替换成"adc_"即可,由于chrome升级频繁,推荐以下两个网址下载对应版本的driver
最新版本:https://googlechromelabs.github.io/chrome-for-testing/#stable
历史版本:https://chromedriver.storage.googleapis.com/index.html
利用devtools,用命令行启动chrome浏览器,指定remote-debugging-port(这个端口可以是自定义的):
C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --remote-debugging-port=9222 --user-data-dir=“C:\test_selenium”
此时已经打开了chrome浏览器,selenium便接管该浏览器进程,于是之前的语句会被替换成如下:
from selenium.webdriver.chrome.options import Options
# driver = webdriver.Chrome() #注释掉,换做下面的
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = "chromedriver路径"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
全部代码样例如下:
#!/usr/bin/env python from selenium import webdriver CHROME_PATH = r"D:\xiazai\chromedriver-win64 (1)\chromedriver-win64\chromedriver_t.exe" options = webdriver.ChromeOptions() # # 隐藏 正在受到自动软件的控制 这几个字 options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) # 禁用blink引擎渲染功能,AutomationControlled是仅在 Chrome 由自动化控制时启用的功能 options.add_argument("--disable-blink-features") options.add_argument("--disable-blink-features=AutomationControlled") # options.add_argument('--headless') # options.add_argument('--disable-gpu') # options.add_argument('user-agent={}'.format(USER_AGENT)) # options.add_argument("--proxy-server=http://127.0.0.1:8081") # options.add_argument("--user-data-dir=C:\\Users\\用户名\\AppData\Local\\Google\\Chrome\\User Data") driver = webdriver.Chrome(executable_path=CHROME_PATH,options=options) url_sign = "https://bot.sannysoft.com/" # # 修改 webdriver 值 # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { # "source": "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})" # }) with open('stealth.min.js') as f: js = f.read() driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": js }) driver.get(url_sign) driver.quit()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。