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

这篇具有很好参考价值的文章主要介绍了使用pyppteer+ddddocr通过极验滑块验证码(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

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

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

        目标网站:行为验证4.0-适应型验证码-滑动验证,点选验证,图片验证-极验GeeTest滑块验证源码,Python网络爬虫,爬虫,python

 

    # 浏览器 启动参数
    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()

滑块验证源码,Python网络爬虫,爬虫,python

验证通过,欧耶~

六:完整代码

# coding:utf-8
import ddddocr
# coding:utf-8
import asyncio
import time

import requests
from pyppeteer.launcher import DEFAULT_ARGS

DEFAULT_ARGS.remove("--enable-automation")
from pyppeteer import launch


async 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 False


if __name__ == '__main__':
    main()
    asyncio.get_event_loop().run_until_complete(main())

 文章来源地址https://www.toymoban.com/news/detail-731291.html

到了这里,关于使用pyppteer+ddddocr通过极验滑块验证码(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium 超级鹰 通过携程滑块和汉字验证码

    1、进入页面点击同意按钮。 2、得到滑块和滑块区域的xpath 3、定位滑块,设置按住事件,进行拖动 4、xpath定位汉字图片,获取屏幕截图,保存本地 5、超级鹰识别图片返回汉字对应的坐标,移动至坐标位置进行点击。需注意selenium 4.3版本在移动坐标时有问题,建议使用4.0版本

    2024年02月06日
    浏览(35)
  • Python通用验证码识别OCR库ddddocr的安装使用

    之前写了一篇关于java使用tess4j进行图片文字识别.md的,对于应付简单的数字识别还是能应付,但总体效果、识别率很一般,后来同事找到了这一篇写的,(亲测好用便捷)Python通用验证码识别OCR库ddddocr的安装使用教程,试用了下确实效果要好很多,因此也记录一下,算是白嫖了

    2024年02月05日
    浏览(52)
  • 如何通过drissionpage以及js逆向过字符/滑块/点选/九宫格验证码文章/视频学习案例

    仅供学习交流仅供学习交流仅供学习交流 各种关于drissionpage文章视频案例解决方案合集,解决方案,可以点击作者官方社群文章查看 ;部分内容入门案例看下方, 视频在作者官方文档有教学视频介绍 如下目录内容js逆向部分文字视频也可以到该合集博客点击查看

    2024年04月17日
    浏览(40)
  • 极验系列文章一:极验三代 极验验证码整体流程分析

    作为一位js逆向爱好者,写本篇文章在于纯技术分析。无任何不良商业目的。旨在提高大家的网络安全意识,共同维护网络安全环境!请不要做任何有损国家或其他集体或个人的事情, 否者后果自负!本文如有任何侵权行为,请马上联系作者,立马删除。 目标地址:aHR0cHM6

    2024年02月14日
    浏览(40)
  • 使用opencv识别滑块验证

    对于某些简单的滑块,无需进行模型训练,可以使用opencv就能识别,比如: 有一种常用方法cv2.matchTemplate,可以将滑动的图案与背景图案进行模板匹配,这种方法适用于滑动图案与背景图片中目标位置有相同图案的情况。 但是本文想介绍的是另一种:背景中目标位置是空白的

    2024年03月10日
    浏览(40)
  • 使用selenium解决滑块验证的问题

    使用自动化测试时有些网站会使用滑块来阻止,所以如何解决滑块问题已经成为自动化测试不可或缺的,今天以网易易盾网站的滑块举例:https://dun.163.com/trial/sense 要解决滑块问题的关键就是匹配滑块在背景图中的位置所以使用python中的numpy库来实现获取滑块在背景的坐标,获

    2024年02月12日
    浏览(35)
  • selenium爬虫|破解滑动验证码以极验为例

      爬虫访问一些网站遇到滑动验证码解决方案 这里是用selenium做模拟,如果是requests可以封装这个登录方法来获取登录后的cookies也是可以用的。 1 先讲思路,分析流程  我们输入账号密码后点击登录 ,出现的是第一张图的状态。我们要做的是模拟滑动到缺口处。 首先我们要

    2024年02月14日
    浏览(57)
  • 使用selenium模拟登录解决滑块验证问题

    目录 1.登录入口 2.点击“账号密码登录” 3.输入账号、密码并点击登录 4.滑块验证过程 5.小结 本次主要是使用selenium模拟登录网页端的TX新闻,本来最开始是模拟请求的,但是某一天突然发现,部分账号需要经过滑块验证才能正常登录,如果还是模拟请求,需要的参数太多了

    2024年02月16日
    浏览(42)
  • Python爬虫之极验滑动验证码的识别

    上节我们了解了可以直接利用 tesserocr 来识别简单的图形验证码。近几年出现了一些新型验证码,其中比较有代表性的就是极验验证码,它需要拖动拼合滑块才可以完成验证,相对图形验证码来说识别难度上升了几个等级。本节将讲解极验验证码的识别过程。 1. 本节目标 我们

    2024年02月22日
    浏览(53)
  • 【Python从入门到进阶】39、使用Selenium自动验证滑块登录

    接上篇《38、selenium关于Chrome handless的基本使用》 上一篇我们介绍了selenium中有关Chrome的无头版浏览器Chrome Handless的使用。本篇我们使用selenium做一些常见的复杂验证功能,首先我们来讲解如何进行滑块自动验证的操作。 我们要通过selenium来实现目前常见的滑块验证码的验证,

    2024年02月08日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包