只是收集目前找到的一些关于selenium的反爬问题。
未亲自尝试,不保证效果。也会持续跟进相关的内容继续整理。
1.window.navigator.webdriver
现象:用户正常访问该值为false。使用selenium时该值为true。
解决:去除该参数
option = ChromeOptions()#设置为开发者模式
option.add_experimental_option('excludeSwitches',['enable-automation'])
option.add_experimental_option('useAutomationExtension',False)
option.add_argument("--disable-blink-features=AutomationControlled")
browser = WebChrome(options=option)
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source':'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'})#网上还找到一些关于通过 stealth.min.js 隐藏chromedirver特征的内容。#说是chromedirver 88 版本以后。#chrome_options.add_argument("--disable-blink-features=AutomationControlled")#就能够隐藏特征内容了。
2.cookie验证
现象:登录是绕不开的话题,我也不知各个网站都是怎么验证登录的。有没有什么隐藏的手段。
解决办法:设置缓存路径,每次启动selenium加载对应缓存
option.add_argument('--user-data-dir=C:\\Users\\用户名\\AppData\\Local\\Google\\Chrome\\User Data')
option.add_argument('--profile-directory=Default')
browser = WebChrome(options=option)#这行代码直接使用了,自身浏览器的缓存文件。
3.chromedriver的驱动key验证
现象:验证chromedriver文件中的key值。相同就拒绝访问。
解决办法:修改chromedriver文件
1)notepad3 打开该文件。搜索 $cdc_
2)修改$cdc_后面的字符串,默认都是'$cdc_asdjflasutopfhvcZLmcfl_'。保证改后和之前的长度一致。
4.内核启动验证
现象:还是能被发现是selenium,或者是发现是driver启动的。
解决办法:采用端口通讯的方式,控制浏览器。
https://www.byincd.com/bobjiang/article-01182/
5.还是关于特征隐藏的
使用undetected_chromedriver 的来替代selenium的 webdriver
import undetected_chromedriver as uc
option = uc.ChromeOptions()
self.browser = uc.Chrome(options=option)
版权归原作者 凌漾 所有, 如有侵权,请联系我们删除。