爬虫学习笔记(十九)—— 滑动验证码

一、概念

滑动验证码也叫行为验证码,比较流行的一种验证码,通过用户的操作行为来完成验证,其中最出名的就是极验。滑动验证码的原理就是使用机器学习中的深度学习技术,根据一些特征来区分是否为正常用户。通过记录用户的滑动速度,还有每一小段时间的瞬时速度,用户鼠标点击情况,以及滑动后的匹配程度来识别。而且,不是说滑动到正确位置就是验证通过,而是根据特征识别来区分是否为真用户,滑到正确位置只是一个必要条件。


二、实现步骤

通过代码来模拟验证码滑动主要有4个步骤:

  1. 获取验证码图片,包含缺口图,滑块图,完整图
  2. 计算缺口位置,滑块位置,滑块要滑动的距离
  3. 通过算法模拟人工移动轨迹
  4. 通过selenium模拟操作

(练习网址:https://captcha1.scrape.center/


2.1、获取验证码图片

首先通过“网页调试工具“观察 缺口图,滑块图,完整图 在源码中的位置

三个canvas标签分别对应了缺口图,滑块图和完整图。接下来,我们要通过修改页面样式来获取这三个图:

  1. 让滑块隐藏,截取缺口图;
  2. 隐藏缺口图,显示滑块图,截取滑块图;
  3. 显示完整图,截取完整图。

注意: 获取完图片记得还原,避免在接下来的操作中出错


2.1.1、获取缺口图

通过修改display属性,隐藏滑块,获取缺口图

代码:

js_hide_slice = 'document.getElementsByClassName("geetest_canvas_slice")[0].style.display="none"'
driver.execute_script(js_hide_slice)
#截取缺口图
gap_imgpath = './gap.png'
driver.find_element_by_class_name('geetest_canvas_bg').screenshot(gap_imgpath)

2.1.2、获取滑块图

通过修改display属性,隐藏缺口图,显示滑块图,截取滑块图

代码:

js_hide_gap = 'document.getElementsByClassName("geetest_canvas_bg")[0].style.display="none"'
js_show_slice = 'document.getElementsByClassName("geetest_canvas_slice")[0].style.display="block"'
driver.execute_script(js_hide_gap+';'+js_show_slice)
#截取滑块图
slice_imgpath='./slice.png'
driver.find_element_by_class_name('geetest_canvas_slice').screenshot(slice_imgpath)

2.1.3、获取完整图

通过修改display属性,获取完整图

代码:

js_show_full = 'document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display="block"'
driver.execute_script(js_show_full)
full_imgpath = './full.png'
driver.find_element_by_class_name('geetest_canvas_fullbg').screenshot(full_imgpath)

2.1.4、完整代码

def get_captcha_img():
    "获取验证码图片"
    #1、隐藏滑块 获取缺口图
    time.sleep(3)
    js_hide_slice = 'document.getElementsByClassName("geetest_canvas_slice")[0].style.display="none"'
    driver.execute_script(js_hide_slice)
        #获取缺口图
    gap_imgpath = './gap.png'
    driver.find_element_by_class_name('geetest_canvas_bg').screenshot
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值