大家好,我是辰哥~
在之前的文章中,给大家介绍了关于滑动验证码的原理和破解方法,在这个基础上给大家在介绍一种新的反爬虫方式——滑动拼图验证码。
辰哥今天来跟大家分享一下如何解决验证码反爬虫中的滑动验证码反爬虫。
01
原理
滑动拼图验证码是在滑块验证码的基础上增加了一个随机滑动距离,用户需要将滑块滑到拼图的缺口处,使拼图完整,才能通过校验。如下图所示:
02
破解
其实破解滑动拼图验证码的原理和滑块验证码的是一样的,就是找到滑动距离,然后让滑块按照该距离进行滑动即可。
但是滑动拼图验证码,它的滑动距离是随机的,所以我们不能像对滑块验证码一样,通过直接观察滑块和滑轨的长度来确定滑动距离。
我们打开开发者模式,对网页进行观察,果然从中找到了一些线索。如下图所示:
从图中可以看出,当我们点击滑块后,拼图和缺角的CSS代码就会展示出来。
并且我们发现,滑块移动的距离就是缺口CSS样式中的left值减去拼图CSS样式中的值。
01
确定滑动距离
好了,通过上面的分析,我们已经找到了获取滑块滑动距离的思路了,那么现在就是来将思路转化成代码实现即可。
1. 获取点击滑块后的网页代码
因为点击滑块后,缺口和拼图的CSS样式才会显示出来,获取代码如下:
代码语言:javascript复制from selenium import webdriver
import time
driver = webdriver.Chrome(r'chromedriver.exe')
driver.get(url)
jigsawCircle = driver.find_element_by_css_selector('#jigsawCircle')
action = webdriver.ActionChains(driver)
action.click_and_hold(jigsawCircle).perform()
time.sleep(2)
html = driver.page_source
2. 提取CSS样式中的left值
我采用的用BS4库进行提取,有兴趣的读者可以看看这篇文章,提取代码如下:
代码语言:javascript复制from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(html,'lxml')
qidian = soup.find_all(id='missblock')[0]['style']
zhongdian = soup.find_all(id='targetblock')[0]['style']
left_hua = re.findall('left:(.*?)px',qidian)
left_que = re.findall('left:(.*?)px',zhongdian)
3. 计算滑动距离
计算代码如下:
代码语言:javascript复制distance = float(left_que[0])-float(left_hua[0])
02
模拟滑动
因为在计算滑动距离的时候,我们就已经将鼠标定在滑块位置了,那么我们现在只需移动鼠标到缺口处即可完成校验。代码如下:
代码语言:javascript复制action.move_by_offset(distance,0)
action.release().perform()
03
小结
1. 本文详细介绍了滑动拼图验证码反爬虫的原理和破解方法。
2. 滑动拼图验证码是现在非常流行的一种验证码反爬虫,所以大家如果想成为一名爬虫工程师,那这绝对是一个必备技能。
3. 破解滑动拼图验证码的关键是要找到拼图和缺口这两者之间距离的联系,只要找到随机移动的距离,那模拟移动,想必对大家来说都不是什么事~
4. 本文仅供学习参考,不做它用。
END
最近辰哥利用空闲时间瞎弄了一个可视化平台,感兴趣的小伙伴可以去看一看。
链接:show.chenlove.cn
如果大家对这个平台有什么更好的建议可以在下方留言,辰哥一定加以改进,谢谢?