在爬取jianshu文章的时候发现,jianshu竟然买了阿里云的盾块验证!!!很是头疼,虽然说没有其他图片匹配的那么麻烦,但是阿里云的人机验证和算法真的是顶尖的,查阅了多个资料最后没办法,才实现用webdriver模拟鼠标去通过验证
首先我们需要安装webdriver驱动和Google Chrome浏览器,驱动连接如下:
http://chromedriver.storage.googleapis.com/index.html
需要注意的是驱动版本要与浏览器版本相对应,不知道怎么找的可以看我的另一篇文章
Python爬虫scrapy+webdriver,selenium使用webdriver启动chrome出现闪退现象_WakeUpCcc的博客-CSDN博客
安装完驱动后,需要安装一个模拟鼠标的配件:pyautogui
在Terminal中输入:
pip install pyautogui
接下来就需要搭建通道了
需要注意的是,阿里的盾快验证很厉害,不要随意调用返回页面Response中的参数,否则会直接报错!!!!!!
需要配置UA和去掉浏览器的标头等:
options = webdriver.ChromeOptions()
options.add_argument('--disable-gpu')
options.add_argument('no-sandbox')
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('user-agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"')
然后启动本地Chrome:
driver = webdriver.Chrome(options=options)--启动浏览器
driver.wait = WebDriverWait(driver, 10, 1)
driver.maximize_window()--放大浏览器
接下来就要获取滑块的坐标了:
sizex, sizey = pyautogui.size()--创建鼠标x,y坐标
pyautogui.dragTo(sizex * 0.54, sizey * 0.26, duration=sj, button='left')--duration为滑动时长,button为鼠标状态,left指按住鼠标左键
pyautogui.dragRel(260, 0, duration=sj1, button='left')--第一个参数为x轴长度,第二个参数为y轴参数
阿里的算法也是很牛的,拖动滑块的时长不能写入固定值
这里采用了随机数的方法:
sj = (random.uniform(1, 3))
sj = format(sj, '.9f')
sj = float(sj)
sj1 = (random.uniform(1, 4))
sj1 = format(sj1, '.9f')
sj1 = float(sj1)
最后建议验证成功后等待2~3秒,给服务器一个响应时长
验证成功后返回页面response时长即可
总结:整体来说并不是很难,只不过方法笨了点,但是也是解决了问题不是
缺点:过于依赖网络波动,网络波动较大,则会导致页面响应时间过长,或者验证失败文章来源:https://www.toymoban.com/news/detail-435352.html
这种验证方法并不是百试百灵,也会有验证失败的情况文章来源地址https://www.toymoban.com/news/detail-435352.html
到了这里,关于python爬虫 scrapy+selenium+webdriver实现鼠标滑动破解阿里云盾快验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!