本文共 1638 字,大约阅读时间需要 5 分钟。
2020中国游戏十强投票网站的自动化操作实验
首先,进入投票网站进行注册,发现需要填写姓名、手机号和邮箱信息。虽然现实中存在用户信息真实性的问题,但对于技术实现来说,我们可以通过随机生成百家姓名后的名字、随机号码、随机邮箱来完成自动化操作。
点击"开始投票"后,会跳转到滑块验证码认证界面。这个过程并没有涉及复杂的技术,甚至可以说非常简单。然而,这里有个小陷阱——由于采用了Canvas绘制滑块验证码,传统的图像识别方法已经不再适用。
通过分析发现,该滑块验证码采用了完全不同的实现方式:滑块是通过Canvas绘制出来的,而非传统的图片拼接方式。
def download_canvas(): # 执行JavaScript获取Canvas内容 canvas_data_url = execute_script('return document.getElementById("puzzle-canvas").toDataURL();' base64_img = base64.b64decode(canvas_data_url.split(',')[1:]) # 将二进制转换为PNG文件 with open('puzzle.png', 'wb') as f: f.write(base64_img)
import PILdef identify_puzzle_position(puzzle_image): # 转换为黑白图像 image = PIL.Image.open(puzzle_image).convert('L') # 遍历找最小x轴位置 for x in range(image.size[0]): if any(image.getpixel((x, y)) for y in range(image.size[1])): return x - 10 # 减少10个像素的偏移量 return 0
通过分析发现,传统图片滑块验证需要解析背景图片中的缺口,这对算法要求较高。Canvas实现的滑块只需要找到滑块左端的位置,因为这直接决定了移动距离,这大大简化了验证流程。
通过对多个投票页面进行测试,发现Canvas滑块的实现方式有很大特点:由于滑块是通过移动一个透明的PNG图层进行验证,实际上只需要计算x坐标即可算出移动距离。
通过以上实现,充分证明了Canvas滑块验证码其实并没有想象中的那么难。相比于传统的图像识别问题,这种方式反而简化了验证流程,甚至可以说降低了技术门槛。
对于想实现类似自动化操作的人来说,关键在于:
希望以上内容能够为大家提供一些启发!
转载地址:http://rengz.baihongyu.com/