整理网上关于selenium的反爬机制以及解决办法。

只是收集目前找到的一些关于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/

5.还是关于特征隐藏的

使用undetected_chromedriver 的来替代selenium的 webdriver

import undetected_chromedriver as uc
option = uc.ChromeOptions()
self.browser = uc.Chrome(options=option)

你可能感兴趣的:(selenium,chrome,python)