返回顶部
首页 > 资讯 > 后端开发 > Python >使用pyppteer+ddddocr通过极验滑块验证码(附源码)
  • 652
分享到

使用pyppteer+ddddocr通过极验滑块验证码(附源码)

爬虫python 2023-10-20 19:10:10 652人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

前言:         验证码是大多数爬虫都需要克服的难题。pyppteer是目前市场主流的自动化工具之一,它的优势在于不易被浏览器检测到,DDDdocr也是目前主流的验证码识别的第三方模块。接下来就通过python自动化工具和ddddoc

前言:

        验证码是大多数爬虫都需要克服的难题。pyppteer是目前市场主流的自动化工具之一,它的优势在于不易被浏览器检测到,DDDdocr也是目前主流的验证码识别的第三方模块。接下来就通过python自动化工具和ddddocr等第三方模块完成极验滑块。

一:使用自动化工具打开网站

        目标网站:行为验证4.0-适应型验证码-滑动验证,点选验证,图片验证-极验GeeTest

 

    # 浏览器 启动参数    start_parm = {        # 关闭无头浏览器        "headless": False,        "args": [            '--disable-infobars',  # 关闭自动化提示框            '--no-sandbox',  # 关闭沙盒模式            '--start-maximized',  # 窗口最大化模式        ],    }    browser = await launch(**start_parm)    page = await browser.newPage()    # 设置网页 视图大小    await page.setViewport(viewport={'width': 1920, 'height': 1080})    await page.Goto('https://www.geetest.com/adaptive-captcha-demo')

二:控制鼠标定位到指定元素

   await page.waitForXPath('//div[@class="type-config"]')  # 等待元素加载    botton1 = await page.xpath('//div[@class="tab-item tab-item-1"]')  # 滑块拼图验证按钮    await botton1[0].click()    await page.click('#captcha', options={        'button': 'left',        'clickCount': 2,        'delay': 300,  # 延迟点击(ms)    })    botton2 = await page.xpath('//*[@aria-label="点击按钮开始验证"]')  # 开始验证按钮    await botton2[0].click()

三:提取滑块拼图照片url

elements_1 = await page.xpath(            '//*[@id="captcha"]/div[2]/div[1]/div[4]/div[1]/div[2]/div/div/div[1]/div[1]/div[1]/@style')  # 滑块图片链接        elements_2 = await page.xpath(            '//*[@id="captcha"]/div[2]/div[1]/div[4]/div[1]/div[2]/div/div/div[1]/div[2]/@style')  # 背景图片链接        for element in elements_1:            sc = await page.evaluate('(element) => element.textContent', element)            sc_url = sc.split('"')[1].split('"')[0]  # 提取滑块图片链接            with open('slice.png', 'wb')as f1:                f1.write(requests.get(sc_url).content)        for element in elements_2:            bg = await page.evaluate('(element) => element.textContent', element)            bg_url = bg.split('"')[1].split('"')[0]  # 提取背景图片链接            with open('bg.png', 'wb') as f2:                f2.write(requests.get(bg_url).content)

四:获取拼图坐标偏移量

async def get_xy():    det = ddddocr.DdddOcr(det=False, ocr=False)    with open('slice.png', 'rb') as f:        target_bytes = f.read()    with open('bg.png', 'rb') as f:        background_bytes = f.read()    try:        res = det.slide_match(target_bytes, background_bytes)        print(res)        return res.get('target')[0]    except:        return False

五:操作鼠标移动滑块

        其中x,y需要根据自己电脑进行微调。

        if target:            # print(target)            botton3 = await page.xpath(                '//*[@id="captcha"]/div[2]/div[1]/div[4]/div[1]/div[2]/div/div/div[2]/div/div[3]')            await botton3[0].hover()  # 鼠标悬停元素上            await page.mouse.down()  # 鼠标落下            await page.waitFor(500)            x = 1116 + target            y = 641            await page.mouse.move(x, y, {'steps': 2})  # 鼠标移动            await page.waitFor(500)            await page.mouse.up()  # 鼠标松开            time.sleep(2)            elements_3 = await page.xpath('//*[@id="captcha"]/div[2]/div[1]/div[3]/div[2]/div/div[2]/text()')            msg = ''            for element in elements_3:                msg = await page.evaluate('(element) => element.textContent', element)            if msg == '验证通过':                break            else:                print(msg)        else:  # 获取坐标失败时刷新验证            botton4 = await page.xpath('//*[@aria-label="刷新验证"]')            await botton4[0].click()

验证通过,欧耶~

六:完整代码

# coding:utf-8import ddddocr# coding:utf-8import asyncioimport timeimport requestsfrom pyppeteer.launcher import DEFAULT_ARGSDEFAULT_ARGS.remove("--enable-automation")from pyppeteer import launchasync def main():    # 浏览器 启动参数    start_parm = {        # 关闭无头浏览器        "headless": False,        "args": [            '--disable-infobars',  # 关闭自动化提示框            '--no-sandbox',  # 关闭沙盒模式            '--start-maximized',  # 窗口最大化模式        ],    }    browser = await launch(**start_parm)    page = await browser.newPage()    # 设置网页 视图大小    await page.setViewport(viewport={'width': 1920, 'height': 1080})    await page.goto('https://www.geetest.com/adaptive-captcha-demo')    time.sleep(2)    await page.waitForXPath('//div[@class="type-config"]')  # 等待元素加载    botton1 = await page.xpath('//div[@class="tab-item tab-item-1"]')  # 滑块拼图验证按钮    await botton1[0].click()    await page.click('#captcha', options={        'button': 'left',        'clickCount': 2,        'delay': 300,  # 延迟点击(ms)    })    botton2 = await page.xpath('//*[@aria-label="点击按钮开始验证"]')  # 开始验证按钮    await botton2[0].click()    while True:        time.sleep(5)        elements_1 = await page.xpath(            '//*[@id="captcha"]/div[2]/div[1]/div[4]/div[1]/div[2]/div/div/div[1]/div[1]/div[1]/@style')  # 滑块图片链接        elements_2 = await page.xpath(            '//*[@id="captcha"]/div[2]/div[1]/div[4]/div[1]/div[2]/div/div/div[1]/div[2]/@style')  # 背景图片链接        for element in elements_1:            sc = await page.evaluate('(element) => element.textContent', element)            sc_url = sc.split('"')[1].split('"')[0]  # 提取滑块图片链接            with open('slice.png', 'wb')as f1:                f1.write(requests.get(sc_url).content)        for element in elements_2:            bg = await page.evaluate('(element) => element.textContent', element)            bg_url = bg.split('"')[1].split('"')[0]  # 提取背景图片链接            with open('bg.png', 'wb') as f2:                f2.write(requests.get(bg_url).content)        target = await get_xy()  # 得到滑块x坐标偏移量        if target:            # print(target)            botton3 = await page.xpath(                '//*[@id="captcha"]/div[2]/div[1]/div[4]/div[1]/div[2]/div/div/div[2]/div/div[3]')            await botton3[0].hover()  # 鼠标悬停元素上            await page.mouse.down()  # 鼠标落下            await page.waitFor(500)            x = 1116 + target            y = 641            await page.mouse.move(x, y, {'steps': 2})  # 鼠标移动            await page.waitFor(500)            await page.mouse.up()  # 鼠标松开            time.sleep(2)            elements_3 = await page.xpath('//*[@id="captcha"]/div[2]/div[1]/div[3]/div[2]/div/div[2]/text()')            msg = ''            for element in elements_3:                msg = await page.evaluate('(element) => element.textContent', element)            if msg == '验证通过':                break            else:                print(msg)        else:  # 获取坐标失败时刷新验证            botton4 = await page.xpath('//*[@aria-label="刷新验证"]')            await botton4[0].click()    input('---验证通过---')    await browser.close()async def get_xy():    det = ddddocr.DdddOcr(det=False, ocr=False)    with open('slice.png', 'rb') as f:        target_bytes = f.read()    with open('bg.png', 'rb') as f:        background_bytes = f.read()    try:        res = det.slide_match(target_bytes, background_bytes)        print(res)        return res.get('target')[0]    except:        return Falseif __name__ == '__main__':    main()    asyncio.get_event_loop().run_until_complete(main())

 

来源地址:https://blog.csdn.net/weixin_61736939/article/details/130048614

--结束END--

本文标题: 使用pyppteer+ddddocr通过极验滑块验证码(附源码)

本文链接: https://lsjlt.com/news/433171.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用pyppteer+ddddocr通过极验滑块验证码(附源码)
    前言:         验证码是大多数爬虫都需要克服的难题。pyppteer是目前市场主流的自动化工具之一,它的优势在于不易被浏览器检测到,ddddocr也是目前主流的验证码识别的第三方模块。接下来就通过python自动化工具和ddddoc...
    99+
    2023-10-20
    爬虫 python
  • python 识别图片验证码/滑块验证码准确率极高的 ddddocr 库
    前言 验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。 识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 d...
    99+
    2023-09-05
    python 开发语言 numpy
  • 如何使用php+js实现极验,拖动滑块验证码验证表单
    这篇文章给大家分享的是有关如何使用php+js实现极验,拖动滑块验证码验证表单的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   代码实现   html文件   <!...
    99+
    2024-04-02
  • Python通用验证码识别OCR库之ddddocr验证码识别
    目录前言传统验证码滑动验证码文字点选验证码总结前言 相信做自动化测试的同学一定不可忽视的问题就是验证码,他几乎是一个网站登录的标配,当然,我一般是不建议在这上面浪费时间去做识别的。 ...
    99+
    2024-04-02
  • Python中怎么使用ddddocr库识别图片与滑块验证码
    这篇“Python中怎么使用ddddocr库识别图片与滑块验证码”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中...
    99+
    2023-07-05
  • Python中识别图片/滑块验证码准确率极高的ddddocr库详解
    目录前言环境准备快速开始图片验证码滑块验证码识别中文前言 验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。 识别验证码的python...
    99+
    2023-02-28
    Python ddddocr识别图片验证码 Python ddddocr识别滑块验证码 Python ddddocr识别验证码 Python ddddocr
  • 【JavaScript 逆向】极验三代滑块验证码逆向分析
    声明 本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除! 案例目标 极验验证码 demo:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby8= 滑动验证码:aHR0cHM6Ly93d...
    99+
    2023-09-09
    python 验证码 JavaScript 逆向
  • 用selenium解决滑块验证码
    前言 因为种种原因没能实现愿景的目标,在这里记录一下中间结果,也算是一个收场吧。这篇博客主要是用selenium解决滑块验证码的个别案列。 思路: 用selenium打开浏览器指定网站将残缺块图片和背...
    99+
    2023-09-04
    selenium chrome python
  • 如何使用Python实现极验验证码识别验证码
    这篇“如何使用Python实现极验验证码识别验证码”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用Python实现极验...
    99+
    2023-07-05
  • Python怎么通用验证码识别OCR库ddddocr
    这篇文章主要介绍“Python怎么通用验证码识别OCR库ddddocr”,在日常操作中,相信很多人在Python怎么通用验证码识别OCR库ddddocr问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pytho...
    99+
    2023-07-02
  • Python通用验证码识别OCR库ddddocr的安装使用
    Python通用验证码识别OCR库ddddocr的安装使用 一、前言二、Python安装(Python版本必须>=3.8)三、安装ddddocr3.1 解决ssl module 的问题3.1....
    99+
    2023-09-11
    python linux 开发语言
  • 怎么用JavaScript实现滑块验证码
    本篇内容主要讲解“怎么用JavaScript实现滑块验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用JavaScript实现滑块验证码”吧!效果:鼠标在底部滑块上按下按住不松拖动可以移...
    99+
    2023-06-25
  • Python通用验证码识别OCR库ddddocr的安装使用教程
    目录前言一、安装ddddocr二、使用ddddocr1. 使用举例2. 完整代码3. 验证码样例4. 识别结果三、代码说明总结前言 在使用自动化登录网站的时候,经常输入用户名和密码后...
    99+
    2024-04-02
  • 怎么使用python识别滑块验证码中的缺口
    这篇文章将为大家详细讲解有关怎么使用python识别滑块验证码中的缺口,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。验证码往往是爬虫路上的一只拦路虎,而其花样也是层出不穷:图片验证、滑块验证、交互式验证、...
    99+
    2023-06-14
  • 怎么使用selenium+opencv实现滑块验证码的登陆
    本文小编为大家详细介绍“怎么使用selenium+opencv实现滑块验证码的登陆”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用selenium+opencv实现滑块验证码的登陆”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-07-06
  • 用selenium解决滑块验证码的实现步骤
    目录前言实现步骤1. 用selenium打开浏览器浏览指定网站1.1 找到chromedriver.exe的路径1.2 代码2.将残缺块图片和背景图片下载到本地2.1 找到图片位置2...
    99+
    2023-02-14
    selenium 滑动验证码 selenium 滑块验证 滑块验证码自动识别
  • 如何用python识别滑块验证码中的缺口
    目录一、缺口识别 1.读取图片 2.识别图片边缘 3.缺口匹配 二、完整代码 验证码往往是爬虫路上的一只拦路虎,而其花样也是层出不穷:图片验证、滑块验证、交互式验证、行为验证等。随着...
    99+
    2024-04-02
  • 使用python 怎么实现一个滑块验证码识别功能
    今天就跟大家聊聊有关使用python 怎么实现一个滑块验证码识别功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。普通滑动验证import timefrom se...
    99+
    2023-06-14
  • Vue3+Vue-cli4项目中使用腾讯滑块验证码的方法
    简介: 滑块验证码相比于传统的图片验证码具有以下优点: 验证码的具体验证不需要服务端去验证,服务端只需要核验验证结果即可。 验证码的实现不需要我们去了解,也不需要我...
    99+
    2024-04-02
  • 如何使用random模块生成验证码
    这篇“如何使用random模块生成验证码”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作