python selenium 淘宝滑块验证码 问题
正常打开淘宝等页面,搜索商品和滑块验证码是没有问题的,但是用selenium打开,在多次翻页后出现的滑块验证码就总是失败,无论是手动滑还是代码控制都不可以,目前正在找解决办法。。。
此问题针对多次翻页出现的滑块验证码,解决思路:
经过各种搜索资料,验证码有两个验证(2018/12/26,具体时间记不清了,这个是文件创建时间,淘宝后续还会继续反爬,此处做记录):
1.检测是否存在特有标识$cdc_lasutopfhvcZLmcfl
2.检验window.navigator.webdriver等
$cdc_lasutopfhvcZLmcfl这个属性在你的chromedriver的位置,我的是放在user/local/bin下面了,《Can a website detect when you are using selenium with chromedriver?》这篇文章介绍了如何更改$cdc_asdjflasutopfhvcZLmcfl,用vim更改(如果懒得改,网盘链接:https://pan.baidu.com/s/1q18FQMeciArjb5Wo0JtaSA 密码:vr3h)
对于window.navigator.webdriver属性,网上有很多方法,可以用await异步,也可以用mitmproxy代理,这两种方法我没有用到,目的就是为了改window.navigator.webdriver属性,所以,还是注入js比较简单:
browser.get(url)
js1= '''Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) '''
js2= '''window.navigator.chrome = { runtime: {}, }; '''
js3= '''Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); '''
js4= '''Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); '''
browser.execute_script(js1)
browser.execute_script(js2)
browser.execute_script(js3)
browser.execute_script(js4)
此时,淘宝的这两个验证就已经更改了,下面 就是 开始滑动滑块儿了(代码百度吧有很多)
这里需要注意一点,滑动的轨迹一定要随机,如果是同一轨迹,就会失败