文章目录
前言
网上的的滑块解锁图形,五花八门,十个里面九个瘫,步步都是坑
目标
目标很简单,就是把滑块放进缺少的图片中

滑块解锁分三种
1.每次验证的第一个图都是定死的
也就是说,访问第一次之后,直接F12算出面积,直接把长度放入代码中即可
2.验证滑块不通过图片不变
这种的话,比较第一种较难点,思路很简单,就是设置一个长度,不断的递增就可以了,比如第一个图可能要求拉15cm也可能是拉33cm才可以,但是我就从3cm开始测试就可以了,3cm不行6cm,6cm不行9cm,反正没刷新图片15cm永远都在那里等着我
3.无论你验证成功失败,你拉一次图片位置变一次
这就是今天的反爬虫机制最高的境界,时时刻刻变位置,前两种的思路都不可以用了,只能计算出长度进行拉取,这也就是这篇博客要讲解的重头戏
一、下载滑块与背景图
1.利用canvas标签下载图片(此路不通)
这是大佬地址,我看了他的博客,只感觉在纸上谈兵,还对骂了一番
附上大佬的代码
def download_yzm(self):
js = '''
return document.getElementById('puzzle-lost').toDataURL()
'''
base64str = self.driver.execute_script(js)
resultstr = base64str.strip("data:image/png;base64")
resultstr = resultstr[1:]
imagedata = base64.b64decode(resultstr)
file = open('./bg.png', "wb")
file.write(imagedata)
file.close()
首先,不看别的,只看到js里面有return 我就知道会报错了,我很纳闷他试了没
在console里面执行js不知道哪个前端加过return才会有数据显示??
他没有实践,所以没有考虑很多问题,比如canvas下载图片地址toDataURL是存在跨域问题的,又比如每次图片滑动的距离并不是写死的,背景图会时时刻刻变化的,所以写代码还是多动手比较好
2.利用selenium的电脑截图下载图片(此路不通)
#移动前获取滑块那部分页面上的图片用selenium截图的形式
driver.find_elements_by_xpath('//*[@class="yidun_bg-img"]')[1].screenshot('0.png')
bg_act = cv.imread('0.png')
bg_act_height, bg_act_width = bg_act.shape[0],bg_act.shape[1]
bg = cv.imread('bg_img.png')
bg_height, bg_width = bg.shape[0],bg.shape[1]
block = cv.imread('img.png', -1)
scale = bg_act_height * 1.0 / bg_height
scale1 = bg_act_width * 1.0 / bg_width
block_act = cv.resize(block, (0,0), fx = scale, fy=scale)
print('scale: ', scale, scale1)
x1,x2 =get_image_deviation(bg, block)
x1 = int(x1*scale)
print("x1x2=", x1, x2)
#部分代码
ActionChains(滑块元素).move_by_offset(xoffset= 移动上面生成的距离, yoffset=0).perform()
#第一次移动后二次识别部分代码
driver.find_elements_by_xpath(

本文详细介绍了三种类型的滑块验证码及对应的破解策略。针对不断变化的滑块位置,作者探讨了下载滑块和背景图片的方法,包括利用Canvas、Selenium截图及鼠标操作的解决方案。在计算滑块距离方面,通过对比像素和模板匹配实现了准确计算。最后,讨论了模拟人为滑动的技巧。博客强调了代码简洁高效的重要性,并提供了实际可行的Python代码示例。
最低0.47元/天 解锁文章
972

被折叠的 条评论
为什么被折叠?



