爬虫时遇到滑动验证,基本思路是通过selenium操作浏览器,将滑动验证的原始图片和缺口图片进行对比,找出缺口位置,然后在利用selenium模拟拖动滑块,达到验证的目的。下面就以猪八戒网为例,进行操作。
一、分析
首先访问 https://account.zbj.com/login:
登陆页面主要为上图。
点击按钮(div标签,类名为 geetest_radar_tip)后,出现滑动验证码:
这个滑动验证图片并没有原始图片,直接出现的就是缺口图片。而我们要找的就是深色缺口的位置。
观察图片标签,找到 这个标签,如果把该标签设置的display属性设置为none,则验证图则会变为下图:
拼接的小方块隐藏掉了,这张图片更容易让我们与原图比对。
然后再找到这个标签,将display设置为block:
原图显示出来,我们可以将上面两张图片的滑动验证图片进行截取,比对,即可找到缺口位置。
实现过程中要注意几点:
1.selenium在加载后,不要立即寻找标签,因为如果标签没有加载完成,会找不到,这样就会抛出错误。
2.截图的大小可以跟浏览器的内显示的大小不一样,需要计算浏览器显示大小与截图大小的比例。
3.进行滑动时,要先加速后减速,如果一直匀速,会被网站识别。
二、实现
1、导入相关要用的包:
from selenium importwebdriverfrom selenium.webdriver.common.by importByfrom selenium.webdriver.support importexpected_conditions as ECfrom selenium.webdriver.support.wait importWebDriverWaitfrom PIL importImagefrom six importBytesIOimporttimefrom selenium.webdriver import ActionChains
2.主函数:
if __name__ == '__main__':
browser=get_url('https://account.zbj.com/login','111111111