只是收集目前找到的一些关于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启动的。
解决办法:采用端口通讯的方式,控制浏览器。
http://www.51testing.com/html/35/n-7794035.html
https://www.byincd.com/bobjiang/article-01182/文章来源:https://www.toymoban.com/news/detail-779946.html
5.还是关于特征隐藏的
使用undetected_chromedriver 的来替代selenium的 webdriver文章来源地址https://www.toymoban.com/news/detail-779946.html
import undetected_chromedriver as uc
option = uc.ChromeOptions()
self.browser = uc.Chrome(options=option)
到了这里,关于整理网上关于selenium的反爬机制以及解决办法。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!