Python爬虫-Selenium(3)
@(博客)[selenium, python, 爬虫, 破解极验]
实战滑动验证
国家企业信用信息公式系统(上海)(http://www.sgs.gov.cn/notice)
思路
破解滑动验证主要需要解决两个问题:1. 滑块移动距离;2. 模拟人操作
找出滑动距离
1. 干掉滑块图案
滑动距离其实就是比较两种图片的在同一个位置点的像素差,我们可以设置一个阈值,当坐标点相同的地方,像素差超过了预设的阈值,我们就认为这里存在缺口,也就是滑块需要移动的距离。
但可以看到,上图右边,中间有个滑块图案,它的存在会影响我们比较像素点的结果,所以需要去掉。在前端,样式中设置display:none;会使得滑块图案消失。
2. 获取两张图片
如何获取完整与有缺块的图片呢?
其实很简单,首先通过selenium提供的截屏接口(browser.get_screenshot_as_png()
),再用BytesIO封装,然后Image.open()
打开。
之所以要绕一圈,这是因为Image.open()
返回来的对象提供crop()
方法用于裁切图片,方便我们取出图片。
def crop_img(pos):
"""截图"""
screentshot = BytesIO(browser.get_screenshot_as_png())
img = Image.open(screentshot).crop(pos)
return img
注意:crop()方法接收一个元组,顺序依次为:left, upper, right, lower
3. 获取图片的位置
由于crop()需要传入位置信息,所以我们还需要获取截取图片的指定位置
需要通过selenium提供的接口,找到包含整个图片的节点,然后利用location获取其坐标,返回来的值是这个节点的左上角坐标