jjzjj

【Python爬虫项目实战三】Ddddocr识别Ocr过开放猫验证码(接Authorization认证更新)

德宏大魔王(自动化助手) 2023-12-19 原文


目录

🍇前言

本篇文章接《获取Chatgpt3.5免费接口文末付代码(过Authorization认证)》,由于上次更新了代码后,对方做了验证,而且验证码有点难识别,真人都有点难看明白,喜欢爬虫类文章的可以订阅我专栏哦
⭐⭐欢迎订阅⭐⭐ ⭐⭐欢迎订阅⭐⭐
🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐ ⭐⭐欢迎订阅⭐⭐

例如:

🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐

【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

⭐⭐欢迎订阅⭐⭐


🍍验证码识别的几个方法

🥥百度AI开放平台

在对接之前,我们先看一下识别效果,可见效果一般,存在个别识别不出来,又因为需要付费于是不考虑

🥥Ddddocr

之前在其他项目中,已经介绍过了Dddocr,可以参考我的文章
《Selenium验证码ddddocr识别:带带ddocr》

识别验证码,5行搞定

 ocr = ddddocr.DdddOcr()
    with open('image.jpg', 'rb') as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    print(res)

效果和百度一样遇到几个畸形的就直接识别出错,可以看看我的截图


{"msg":"操作成功","img":"","code":200,"captchaEnabled":true,"uuid":"d14f1de7a0b842cfae525f3389d00f86"}
识别结果:9t67
提取结果:9t6
字符串中不包含 +-*/ 符号
{"msg":"操作成功","img":"","code":200,"captchaEnabled":true,"uuid":"010ed8010fe241c9a8c2e8c0989f9084"}
识别结果:4j4e7
4j4
字符串中不包含 +-*/ 符号
{"msg":"操作成功","img":"","code":200,"captchaEnabled":true,"uuid":"623dd34830554da49911b2ae75507921"}
识别结果:3t03
3t0
字符串中不包含 +-*/ 符号
{"msg":"操作成功","img":"","code":200,"captchaEnabled":true,"uuid":"164524dd70e74ae18d3782d7887b8974"}
识别结果:1*37
提取结果:1*3
字符串中包含 +-*/ 符号

之前识别发现效果不理想,但是在验证码中,存在简单的验证码随机刷新,所以我的做法是:舍弃百度AI通过Ddddocr识别,识别过程中判断"+、-、*、/"逐步往下获取参数,具体可以往下看


🦑分析验证码位数





在上面的验证码中,都是10内的"+、-、、/“运算,所以只需要匹配”+、-、、/"左右的数字即可

🦑获取验证码接口

def get_captcha():
    headers = {
        'Accept': 'application/json, text/plain, */*',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive',
        'Origin': 'https://openmao.panchuang.net',
        'Referer': 'https://openmao.panchuang.net/',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-site',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
        'sec-ch-ua': '"Google Chrome";v="111", "Not(A:Brand";v="8", "Chromium";v="111"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
    }

    response = requests.get('https://mapi.panchuang.net/api/user/captchaImage', headers=headers)
    print(response.text)
    return response.json()

🦑算法识别匹配

将获取到的验证码通过解析base64存放在根目录

def decode_base64_to_img(base64_str):
    img_data = base64.b64decode(base64_str)
    with open('image.jpg', 'wb') as f:
        f.write(img_data)
    img = Image.open('image.jpg')

Ddddocr识别,识别到后进行特征提取,提取完毕逐步分析,如果提取失败反复操作


def verification():
    # 验证码识别
    ocr = ddddocr.DdddOcr()
    with open('image.jpg', 'rb') as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    print(res)
    text = res[:3]  # 提取前三位子串
    print(text)  # 输出:8*4
    if "+" in text or "-" in text or "*" in text or "/" in text:
        print("字符串中包含 +、-、* 或 / 符号")
        first_char = text[0]  # 第一位字符
        last_char = text[-1]  # 最后一位字符
        print("第一位字符:", first_char)
        print("最后一位字符:", last_char)
        if "+" in text:
            result=int(first_char)+int(last_char)
        if "-" in text:
            result=int(first_char)-int(last_char)
        if "*" in text:
            result=int(first_char)*int(last_char)
        if "/" in text:
            result=int(first_char)/int(last_char)
        print(f"计算结果为{result}")
    else:
        print("字符串中不包含 +、-、* 或 / 符号")
        result = get_captcha()
        # 转换本地
        decode_base64_to_img(result['img'])
        verification()

最后获得计算数据

🦑请求登陆接口

观察login接口

uuid是和验证码一起获取到的

uuid用于定位图片id,带着计算结果和uuid去login接口请求即可

我将计算出来的uuid和验证码结果,显示出来进行构造,这里注释了请求,因为请求了就显示验证码过期

 print(uuid)
 print(result_num)
    json_data = {
        'username': '****9',
        'password': '*****',
        'loginTypeEnum': 'ACCOUNT',
        'code': result_num,
        'uuid': uuid,
    }

    # response = requests.post('https://mapi.panchuang.net/api/user/login', headers=headers, json=json_data)
    # print(response.text)

通过拼接手动填上去验证最后获得token

🍋总结:

以上就是今天的教程,代码审核通过后会放在评论区,该项目现在只是demo仅供提取计算验证码,如果需要Chatgpt3.5接口的可以留言哦,该接口现在用于本人账号对接自动回复,长期互动支持的可以互关哈

推荐我的爬虫文章
《记一次云之家签到抓包》
《记一次视频抓包m3u8解密过程》
《抓包部分软件时无网络+过代理检测 解决办法 安卓黄鸟httpcanary+vmos》
《Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)》
《某课抓包视频 安卓手机:黄鸟+某课app+VirtualXposed虚拟框架》

推荐专栏:

《Python爬虫脚本项目实战》

该专栏往期文章:
《【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)》

🥦如果感觉看完文章还不过瘾,欢迎查看我的其它专栏
🥦作者对python有很大的兴趣,完成过很多独立的项目:例如滇医通等等脚本,但是由于版权的原因下架了,爬虫这一类审核比较严谨,稍有不慎就侵权违规了,所以在保证质量的同时会对文章进行筛选

如果您对爬虫感兴趣请收藏或者订阅该专栏哦《Python爬虫脚本项目实战》,如果你有项目欢迎联系我,我会同步教程到本专栏!

🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐

【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

⭐⭐欢迎订阅⭐⭐

有关【Python爬虫项目实战三】Ddddocr识别Ocr过开放猫验证码(接Authorization认证更新)的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  5. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  6. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  7. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  8. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

随机推荐