没有合适的资源?快使用搜索试试~ 我知道了~
selenium篇之滑动验证码.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 137 浏览量
2022-06-27
21:13:48
上传
评论
收藏 47KB DOCX 举报
温馨提示
试读
15页
现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做滑动验证码。它的原理很简单,首先生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以及坐标等信息到后台进行校验。只要用户移动的距离符合,以及移动的轨迹行为检测通过即可视为验证通过。
资源推荐
资源详情
资源评论
selenium 篇之滑动验证码
一、介绍
现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做
滑动验证码。它的原理很简单,首先生成一张图片,然后随机挖去一块,在页
面展示被挖去部分的图片,再通过 js 获取用户滑动距离,以及坐标等信息到后
台进行校验。只要用户移动的距离符合,以及移动的轨迹行为检测通过即可视
为验证通过。
解决思路
目前这种验证码的通用解决思路如下:
1.
获取验证码图片,包含原图以及有缺口的图
2.
3.
算出缺口的位置,以及滑块要滑动的距离
4.
5.
通过算法模拟人工移动轨迹
6.
7.
通过 selenium 模拟操作
8.
二、逻辑实现
我们以保温网为例 http://www.cnbaowen.net/api/geetest/
1.获取验证码图片
注意我们需要获取两张图片,第一张是完整背景图,第二张是有缺口的背景图。
经过分析发现当鼠标位于按钮是上时显示完整背景图,当鼠标点击滑动按钮不
松,显示有缺口的背景图。
根据之前学习的爬虫知识,图片一定是浏览器下载回来的,通过查看历史请求
确实发现了图片
但是图片有点奇怪,仔细查看发现图片是被分块并有意随机拼接的。根据以页
面的 css 可以利用背景将图片拼接出来。我们当然可以依葫芦画瓢的利用 PIL
进行图片拼接,但是太麻烦了。
selenium 有个方法可以对元素进行截图,先找到图片所在的 html 元素,然后利
用 selenium 分别进行截图即可获取图片。代码如下:
def get_full_image(driver):
""" 鼠标移动到滑块,显示完整图案 :param driver:
webdriver :return: 返回验证码背景图片 Image 对象 """
webdriver.ActionChains(driver).move_to_element(slider).perform()
time.sleep(0.2)
img =
driver.find_element_by_xpath('//*[@id="captcha"]/div/div[1]/div[2]/
div[1]/a[2]')
if 'show' in img.get_attribute('class'):
res = img.screenshot_as_png
return Image.open(BytesIO(res))
else:
raise ValueError('获取验证码背景图片失败')
完整图片
def get_cut_image(driver):
""" 点击滑动按钮获取有缺口图片 :param driver: webdriver
:return: 返回验证码有缺口图片的 Image 对象 """
slider =
driver.find_element_by_xpath('//*[@id="captcha"]/div/div[3]/div[2]')
webdriver.ActionChains(driver).click_and_hold(slider).perform()
time.sleep(0.1)
img =
driver.find_element_by_xpath('//*[@id="captcha"]/div/div[1]/div[2]/
div[1]/a[1]')
res = img.screenshot_as_png
cut_img = Image.open(BytesIO(res))
return Image.open(BytesIO(res))
有缺口图片
2.找出缺口位置,计算移动距离
算法有很多,大家可以自由发挥。这里我们讲一种最简单的方法。我们要算出
的距离是滑块要滑动的距离。
通过比较没有缺口的图片,和这张有缺口的图片,找出滑块的位置和缺口的位
置即可。经过观察,发现滑块出现的位置固定在 x 轴的 0-100 像素范围内,所
以循环比较两张图片的 x 轴 0-100 像素范围内的每一行像素点,直到找到第一
行出现两个图片像素点颜色完全不同的点,即找到了滑块的最左边最上的第一
个像素点。但是在实际操作中发现,虽然肉眼看起来两张图片公共部分一模一
样,但是程序处理后的像素的具体 rgb 值也是不相同的,所以需要设置一个阈
值来判断,具体需要进行测试。
按照相同的思路,比较两张图片 x 轴 100-end 像素的部分,找到缺口的最左最
上那个点。
用找到的缺口像素点的 x 坐标减去找到的滑块的点的 x 坐标得到近似移动距离。
这种算法,经过测试准确率还不错,大家如果在实际工作过程中发现有问题,
需要根据具体情况去设计不同算法。
剩余14页未读,继续阅读
资源评论
小兔子平安
- 粉丝: 210
- 资源: 1940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功