Python爬虫关于滑块验证码自动操作

一.滑块验证码方案

1.背景

项目中有时验证码是滑块滑动拼图形式验证的,这种验证码该如何完成验证呢?

2.思路

  • 1.获取完整验证码背景图片及缺口验证码图片

  • 2.匹配缺口照片在完整照片的位置

  • 3.机器模拟人工滑动轨迹

  • 4 判断拼图是否成功,若成功,跳转其它页面;若失败,滑块拼图递归循环调用

二.豆瓣示例

1.完整验证码背景图片及缺口验证码图片

完整验证码背景图片

缺口验证码图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中缺口图片全图如下,需要把缺口图片扣出来。

缺口图片原图

缺口图片扣图后的结果图片

示例代码如下:



    `image = Image.open(io.BytesIO(response.content))    image.save(SliderCaptchaDemo.FULL_SLIDER_IMAGE)       # 获取验证码x,y轴坐标       crop_point = (71, 248)          # 获取验证码的长宽       crop_size = (61, 61)       # 设备分辨率为2       scale = 2       rangle = (crop_point[0] * scale,                 crop_point[1] * scale,                 crop_point[0] * scale + crop_size[0] * scale,                 crop_point[1] * scale + crop_size[1] * scale                 )       verification_image = image.crop(rangle)    # verification_image = verification_image.convert('RGB')       # 保存我们截取的验证码图片,并读取验证码内容       verification_image.save(SliderCaptchaDemo.SLIDER_IMAGE)`

2.完整示例代码



`    import numpyfrom selenium import webdriverfrom selenium.common import NoSuchElementExceptionfrom selenium.webdriver import ActionChainsfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver import Chromefrom selenium.webdriver import ChromeOptionsfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesfrom selenium.webdriver.safari.options import Optionsimport timeimport requestsfrom PIL import Imageimport ioimport cv2      class SliderCaptchaDemo(object):   URL = "https://accounts.douban.com/passport/login"      BK_IMAGE = 'bk_image.png'      FULL_SLIDER_IMAGE = "full_slider_image.png"      SLIDER_IMAGE = "slider_image.png"     TIME_OUT = 20    def __init__(self):     option = ChromeOptions()     # 解决滑块无法滑动的问题        option.add_experimental_option('excludeSwitches', ['enable-automation'])        option.add_experimental_option('detach', True)        # 创建一个对象,控制chrome浏览器        self.driver = webdriver.Chrome(options=option)   # 创建 SafariOptions 实例        # option = Options()        # # 添加选项        # option.add_argument('-enableFullPageScreenshot
  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值