滑块验证码滑块移动像素偏移

问题背景

中国邮政速递物流网 中的滑块验证码为例:
滑块验证码
如上图滑块可拖动范围拼图可移动范围不相等,且该滑块验证码不能直接拖动拼图本身,如果直接将验证码的识别结果作为滑块的拖动距离会导致成功率极低,此时两者之间可能会有一个官方的偏移系数,需要找到系数并算出实际的滑块拖动距离。(若实在无从查找,只能自行预估并反复测试)

偏移系数查找思路

看到滑块元素不是一个普通的图片元素,而是由 canvas 绘制的,找到控制绘制的 js 代码

可以看到滑块上绑定有一个鼠标移动的事件,点进去

我们看到下面这段 js

打个断点大致分析一下代码,可以看出变量i是下方滑块被拖动的 X 轴像素,而被乘上的(t.w - 40 - 20) / (t.w - 40)应该就是偏移系数了,然后再分析一下这个系数,其中的t.w就是canvas画布的宽度350,至此就知道偏移系数的计算公式了

根据公式简单优化一下拖动的距离x,x = x / ((画布宽度 - 40 - 20) / (画布宽度 - 40)) ,大功告成

滑块验证码是一种常见的反爬虫机制,用于验证用户是否为真实人类而非自动化程序。Python可以借助一些库和工具模拟人工操作完成此类任务。 ### Python实现滑块验证码的基本步骤: #### 1. **图像处理** - 首先需要获取完整的背景图(无缺口的图片)以及带缺口的目标图片。 - 使用 `Pillow` 或者 `opencv-python` 等图像处理库定位目标物体的位置偏移量。 ```python from PIL import Image # 打开两张图片并转换为灰度模式便于计算差异点 img_bg = Image.open('background.png').convert('L') img_tgt = Image.open('target.png').convert('L') # 计算像素差值找到拼图位置... ``` #### 2. **轨迹生成** - 根据计算得到的距离构造拖动轨迹曲线,防止过于简单的直线运动容易被检测到非人为动作。 - 可引入随机函数调整速度、加速度等参数制造更自然的效果。 ```python import random def get_track(distance): track = [] current_pos = 0 mid = distance * 4 /5 while current_pos < distance: if current_pos <=mid : # 前半段加速 a=2+random.random() else: # 后半段减速 a=-3-random.random() v +=a # 当前速度加上当前加速度 move=v +a/2 # 移动距离公式 x'=vt+(at^2)/2 这里t取固定单位时间比如0.1秒简化成直接相加 current_pos+=move # 更新当前位置 track.append(round(move)) return track ``` #### 3. **模拟鼠标事件** - 利用 Selenium WebDriver 控制浏览器界面执行具体的点击拖拽操作。 ```python from selenium.webdriver.common.action_chains import ActionChains driver.get(url) element_slider = driver.find_element_by_class_name("slide-to-unlock-handle") ActionChains(driver).click_and_hold(element_slider).perform() for step in tracks: # 调用上面自定义get_track方法产生的移动列表逐帧播放动画效果 ActionChains(driver).move_by_offset(xoffset=step,yoffset=0).perform() time.sleep(0.5) # 最后再稍作停顿释放按钮触发校验流程 ActionChains(driver).release().perform() ``` 以上只是一个大概框架示意代码片段,请根据实际项目需求安装相应依赖包,并针对特定网站修改元素选择器等内容适配具体场景应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值