- 滑动拼图验证码可以算是滑块验证码的进阶版本,其验证机制相对复杂。本节将介绍两种滑动拼图验证码:初级版和高级版本。
2.4.1 初级版滑块拼图验证码
-
初级版滑动拼图验证码是在普通滑块验证码的基础上增加了随机的滑动距离,用户需要根据拼图的缺口位置来决定滑块的滑动位置。
-
如下左图所示为一个滑块拼图验证码的起始状态,注意此时还没有显示拼图和缺口。单击滑块后就会出现拼图和缺口,如下右图所示。之后会利用这一特性来找到拼图和缺口的位置。
-
下面开始编写代码。首先用Selenium打开网页,代码如下:
from selenium import webdriver
browser =webdriver.Chrome()
url = r’D:workspython_crawl1《Python爬虫(进阶与进通)》代码汇总.验证码反爬.滑动拼图验证码滑动拼图验证码初级index.html’
browser.get(url) #用模拟浏览器打开网页 -
然后定位滑块并模拟单击滑块,让拼图和缺口显现出来。虽然此时单击滑块会显示验证失败,但这是为了帮助我们获取拼图和缺口的真实位置,以计算滑块需要滑动的距离,代码如下:
slider = browser.find_element_by_xpath(‘//*[@id=“slideBtn”]’) #定位滑块
slider.click() # 模拟单击滑块,让拼图和缺口显现出来
time.sleep(3) #等待3秒 -
接着需要找到缺口的位置,初级版滑动拼图验证码可以直接在网页源代码中找到。如下图所示,用元素定位工具选中缺口,在网页源代码中查看缺口的left属性值,即缺口的左边界到整张图片的左边界的距离,这里为135像素。
-
如下图所示,用同样的方法查看拼图的left属性值,即拼图的左边界到整张图片的左边界的距离,这里为2像素。
-
因为拼图的初始left属性值始终为2像素,所以只需要提取缺口的left属性值。这里用正则表达式来提取,代码如下:
import re
data = browser.page_source #