一、 前置回顾承接上篇文章承接上篇超级鹰账号注册、充值、获取 softid 核心重点1.使用现成Chaojiying_Client超级鹰打码2.DrissionPage 操控浏览器元素截图提取验证码3.题型编码1004普通字符验证码识别4.Mac / Windows 双环境适配重点讲解 Mac Chrome 路径坑5.滑块验证码放到下一篇本篇只讲图片字符验证码⚠️ 重要合规提醒✅ 本文代码仅用于自己账号自动化学习测试请勿用于批量恶意爬虫、破解等违规场景遵守网站 robots 协议与相关法律法规。项目文件清单本篇chaojiying.py超级鹰核心打码客户端导入使用图片验证码免登录.py本篇核心主程序古诗文网自动登录开始之前需先安装“DrissionPage”自动化库pip install requests DrissionPage前置准备清单1.注册超级鹰账号并充值题分字符验证码识别消耗题分2.获取你的超级鹰账号、密码、softid3.安装 DrissionPage操控 Chromium 浏览器定位网页元素、截图验证码4.题型编码牢记1004普通字母数字字符验证码本篇核心5.Mac 用户重点指定 Chrome 浏览器路径Windows 可简化初始化代码6.项目结构your_project/├─ chaojiying.py └─ 图片验证码免登录.py# 本篇核心古诗文网字符验证码自动识别登录 完整业务流程总览本篇核心完整流程拆解1.初始化 ChromiumOptionsMac 用户配置 Chrome 浏览器路径创建 ChromiumPage 对象2.请求古诗文网登录页面等待页面加载完成3.实例化 Chaojiying_Client传入你的超级鹰账号密码 softid4.定位验证码图片元素#imgCode对该元素截图保存为yzm.png5.二进制读取截图文件调用PostPic()题型编码填10046.拿到返回结果res[pic_str]就是识别出的验证码字符串7.依次填充账号输入框、密码输入框、验证码输入框8.点击登录提交按钮完成自动化登录实现免手动输入验证码9.【拓展优化】增加异常捕获、重试逻辑识别错误调用 ReportError 上报错题返还题分二、chaojiying.py 源码解析通用打码模块导入使用文件chaojiying.py主程序中from Chaojiying import Chaojiying_Client导入#!/usr/bin/env python# coding:utf-8importrequestsfromhashlibimportmd5classChaojiying_Client(object):def__init__(self,username,password,soft_id):self.usernameusername passwordpassword.encode(utf8)self.passwordmd5(password).hexdigest()self.soft_idsoft_id self.base_params{user:self.username,pass2:self.password,softid:self.soft_id,}self.headers{Connection:Keep-Alive,User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0),}defPostPic(self,im,codetype,str_debug): im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html params{codetype:codetype,str_debug:str_debug}params.update(self.base_params)files{userfile:(ccc.jpg,im)}rrequests.post(http://upload.chaojiying.net/Upload/Processing.php,dataparams,filesfiles,headersself.headers)returnr.json()defPostPic_base64(self,base64_str,codetype): im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html params{codetype:codetype,file_base64:base64_str}params.update(self.base_params)rrequests.post(http://upload.chaojiying.net/Upload/Processing.php,dataparams,headersself.headers)returnr.json()defReportError(self,im_id): im_id:报错题目的图片ID params{id:im_id,}params.update(self.base_params)rrequests.post(http://upload.chaojiying.net/Upload/ReportError.php,dataparams,headersself.headers)returnr.json()if__name____main__:# 账号和密码替换成自己的chaojiyingChaojiying_Client(tiantian1000,htur6h31,96001)# 更改成要识别的验证码的图片imopen(../RandCode.png,rb).read()resultchaojiying.PostPic(im,1004)#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//print(result[pic_str])#1902 验证码类型 官方网站价格体系 3.4版 print 后要加()#print chaojiying.PostPic(base64_str, 1902) #此处为传入 base64代码✨ 核心方法重点解读本篇重点使用 PostPic__init__初始化超级鹰账号密码密码做 md5 加密组装基础请求参数PostPic(im, codetype)【本篇核心】传入图片字节流 题型编码上传图片给超级鹰识别返回 json 结果 -1004普通字符验证码本篇古诗文网识别字母数字PostPic_base64base64 图片上传识别备选方案某些场景优化使用ReportError识别错误上报错题申请返还题分拓展优化必加三、【图片验证码免登录.py】完整源码逐行深度解析文件【图片验证码免登录.py】Mac 环境重点适配版本DrissionPage 操作 Chromium元素截图识别字符验证码fromChaojiyingimportChaojiying_ClientfromDrissionPageimportChromiumPage,ChromiumOptions#网页自动化爬取------自动化库importtime#Mac电脑必备----创建浏览器【安卓只需要pageChromiumPage()即可】coChromiumOptions()co.set_browser_path(/Applications/Google Chrome.app/Contents/MacOS/Google Chrome)co.auto_port(True)pageChromiumPage(co)page.get(https://www.gushiwen.cn/user/login.aspx?tabaccountfrom)#请求登录网址time.sleep(2)ChaojiyingChaojiying_Client(超级鹰账号,超级鹰密码,96001)#登录超级鹰imgpage.ele(#imgCode)img.get_screenshot(yzm.png)#把图截下来withopen(yzm.png,rb)asf:#二进制读取resChaojiying.PostPic(f.read(),1004)#应用超级鹰yzmres[pic_str]print(yzm)time.sleep(1)zhanghaopage.ele(#email).input(你登录该网址的账号)mimaopage.ele(#pwd).input(你登录该网址的密码)yanzhengmapage.ele(#code).input(yzm)loginpage.ele(#btnSubmit).click() 逐段拆解源码保姆级讲解1. 导入模块fromChaojiyingimportChaojiying_ClientfromDrissionPageimportChromiumPage,ChromiumOptionsimporttimeChaojiying_Client超级鹰打码核心类调用打码平台识别验证码ChromiumPage,ChromiumOptionsDrissionPage 浏览器自动化核心操控 Chrome定位网页元素、截图time等待页面加载防止元素未加载完成报错很多新手踩坑点2. Mac 专属浏览器初始化【重点很多 Mac 用户直接报错就在这里】--Mac 系统必须指定 Chrome 完整路径否则找不到浏览器启动失败coChromiumOptions()co.set_browser_path(/Applications/Google Chrome.app/Contents/MacOS/Google Chrome)co.auto_port(True)pageChromiumPage(co)Windows 系统简化写法替换上面 4 行pageChromiumPage()踩坑提示Mac 不同版本 Chrome 安装位置有可能不一样确认你的 Chrome 路径是否匹配3. 访问目标登录页面并等待加载page.get(https://www.gushiwen.cn/user/login.aspx?tabaccountfrom)time.sleep(2)page.get()浏览器打开目标登录 urltime.sleep(2)强制等待 2 秒等待页面 DOM、验证码图片渲染完成 优化拓展可以改用元素等待显式等待替代固定 sleep稳定性更高后面踩坑篇讲解4. 实例化超级鹰客户端ChaojiyingChaojiying_Client(账号,密码,96001)⚠️ 重要提醒替换成你自己的超级鹰账号、密码5. 定位验证码元素截图保存本地imgpage.ele(#imgCode)img.get_screenshot(yzm.png)page.ele(#imgCode)根据 CSS 选择器定位验证码图片元素#imgCodeget_screenshot(yzm.png)元素截图重点只截取验证码图片区域不是整个页面截图 踩坑点如果用整个页面截图多余背景干扰识别优先使用元素截图6. 读取截图调用超级鹰识别验证码核心withopen(yzm.png,rb)asf:resChaojiying.PostPic(f.read(),1004)yzmres[pic_str]print(yzm)rb二进制读取图片文件上传打码平台必须二进制字节流PostPic(...,1004)题型编码 1004普通字符验证码识别res[pic_str]提取识别出来的验证码字符串打印输出调试7. 填充账号、密码、验证码提交登录zhanghaopage.ele(#email).input(账号)mimaopage.ele(#pwd).input(密码)yanzhengmapage.ele(#code).input(yzm)loginpage.ele(#btnSubmit).click()依次定位输入框元素填入账号、密码、识别出的验证码click()点击登录提交按钮完成登录自动化四、调试优化 踩坑大全CSDN 读者最喜欢的章节踩坑 1Mac 启动 Chromium 报错找不到浏览器❌ 现象初始化 ChromiumOptions 后启动失败✅ 解决核对 Chrome 完整路径Mac 系统必须配置set_browser_path踩坑 2验证码还没加载完成就截图识别失败❌ 现象截图空白超级鹰返回识别错误✅ 解决增加等待时间或者使用显式等待等待 #imgCode 元素加载完成再截图踩坑 3识别结果错误提交登录失败❌ 现象超级鹰识别出来的验证码不对登录校验失败✅ 解决检查截图是否完整有没有裁剪缺失调用ReportError上报错题申请返还题分增加重试逻辑识别失败重新刷新验证码重新截图识别踩坑 4元素选择器失效找不到页面元素❌ 现象page.ele()返回空程序报错✅ 解决F12 重新核对 CSS 选择器网页改版后选择器会变动及时更新踩坑 5超级鹰题分不足识别接口报错❌ 现象返回 err_no 报错无法识别验证码✅ 解决登录超级鹰后台充值题分查看账号剩余题分踩坑 6Windows 用户照搬 Mac 浏览器初始化代码❌ 现象Windows 写死 Chrome 路径导致启动异常✅ 解决Windows 简化直接pageChromiumPage()五、优化升级完整版代码增加 try except 异常捕获重试机制保姆级增强版 给读者福利在原版基础上加上 try except 异常捕获重试逻辑很多小白需要这个fromChaojiyingimportChaojiying_ClientfromDrissionPageimportChromiumPage,ChromiumOptionsimporttimedefgushiwen_login(max_retry3):coChromiumOptions()# Mac路径Windows注释掉下面这两行co.set_browser_path(/Applications/Google Chrome.app/Contents/MacOS/Google Chrome)co.auto_port(True)pageChromiumPage(co)try:page.get(https://www.gushiwen.cn/user/login.aspx?tabaccountfrom)time.sleep(2)chaojiyingChaojiying_Client(你的账号,你的密码,96001)retry_cnt0whileretry_cntmax_retry:imgpage.ele(#imgCode)img.get_screenshot(yzm.png)withopen(yzm.png,rb)asf:reschaojiying.PostPic(f.read(),1004)ifres[err_no]!0:print(f识别失败重试{retry_cnt1})retry_cnt1time.sleep(1)continueyzmres[pic_str]print(f识别验证码{yzm})page.ele(#email).input(你的账号)page.ele(#pwd).input(你的密码)page.ele(#code).input(yzm)page.ele(#btnSubmit).click()print(登录提交完成)breakexceptExceptionase:print(f程序异常{e})finally:# 可选关闭浏览器# page.quit()passif__name____main__:gushiwen_login()六、拓展思考1. 思考 1如何实现自动刷新验证码识别失败自动刷新重新截图不用手动干预2. 思考 2如果验证码是干扰线很多的复杂字符除了调整题型编码还有哪些优化方案提升识别准确率3. 思考 3如何封装一个通用工具类统一管理打码调用方便后续拓展更多类型验证码4. 思考 4多账号批量登录场景如何管理超级鹰题分消耗做题分监控七、结尾恭喜你到这里你已经完整跑通了一套 “超级鹰识别验证码 → 自动登录 → Cookie 持久化 → 免登录” 的闭环。这套思路是通用框架不只适用于某一类网站学会了它你能轻松应对各种需要验证码登录的自动化场景。留两个思考题给你1.如果目标站的验证码是滑块类型codetype 要换成多少代码要改哪里2.如果 Cookie 被目标站加密存储不是明文你的持久化方案要怎么升级评论区聊起来有更好的方案、踩过的坑欢迎分享。觉得有用就点赞 收藏 关注下一篇我会继续深挖重磅下篇预告滑块缺口验证码自动化实战✨ 下一篇单独开一篇完整教程专门讲解滑块验证码9901 型使用超级鹰识别缺口坐标搭配 DrissionPage Actions 模拟鼠标拖动滑块完成验证完整源码解析敬请期待欢迎关注评论区交流踩坑经历
企业数字化 ERP 产品动态
相关推荐
专其利 AI V3.4.0 更新说明 专其利 AI V3.4.0 升级说明
AI 对话,更懂你在写什么
输入框支持 快捷引用——直接关联当前专利、上传文件或图片,AI 自动理解上下文,无需反复粘贴内容图片直接上传:支持拖拽或粘贴图片,AI 自动识别图中技术内容并纳入… · 2026/11/6 18:45:54
比亚迪可以考电工证吗?工地太忙根本没时间复习考试,考前押题救你 比亚迪可以考电工证吗?工地太忙根本没时间复习考试,考前押题救你 工地太忙根本没时间复习考试,你是不是也经常在工地上一边扛材料一边想: 比亚迪可以考电工证吗 ?别急,这不是个问题,关键是你怎么安排时间,怎么利用 考前押题… · 2026/11/7 14:27:14
办电工证洛阳保姆级教程:外省证能不能转过来?一步步教你搞定 办电工证洛阳保姆级教程:外省证能不能转过来?一步步教你搞定 之前考的证在外省能不能转过来?这个问题是很多人都关心的,尤其是像你这样在洛阳工作、但证书是外地考的。别担心,下面这 保姆级教程… · 2026/11/7 14:27:14
电工作业不能带手机吗 良心建议帮你避开培训费陷阱 电工作业不能带手机吗 良心建议帮你避开培训费陷阱 怕考不过白交培训费?别再被培训机构忽悠了,电工作业不能带手机吗这个问题,其实直接关系到你能不能顺利通过考试。良心建议是: 手机绝对不能带进考场… · 2026/11/7 14:27:14
特种工吊篮考试实操怎么考才能拿到电子证书 特种工吊篮考试实操怎么考才能拿到电子证书 工地太忙根本没时间复习考试,特种工吊篮考试实操一不小心就挂了,这事儿谁没经历过?特别是像我们鹤壁的初次报考人员,一边要赶工期,一边还得准备考试,压力山大。但别急,只要掌握好方法,拿到 电子证书… · 2026/11/7 14:27:14
比亚迪可以考电工证吗?全国通用证书怎么考不被坑 比亚迪可以考电工证吗?全国通用证书怎么考不被坑 你是不是在比亚迪上班,想着多一条出路,但不知道 比亚迪可以考电工证吗 ?报名渠道五花八门,怕被中介忽悠,更怕花冤枉钱考了没用的证?别急,我这有一套从报名到考试全搞定的干货, 全国通用… · 2026/11/7 14:27:14
电工证办理杨浦区怎么转异地?良心建议来了 电工证办理杨浦区怎么转异地?良心建议来了 之前考的证在外省能不能转过来?这个问题其实很多在外地考过电工证的朋友们都在问。特别是在上海杨浦区,不少从事电力相关工作的朋友,尤其是从河南、周口等地过来的,都会遇到证书异地转移的问题。别急,今天就给… · 2026/11/7 14:26:13
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23
澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄? 澳洲水电工证考试:证书过期了不知道怎么复审延期?电子证书怎么弄? 证书过期了不知道怎么复审延期?别慌,很多人在拿到【澳洲水电工证考试】的电子证书后,一不小心就忽略了复审时间,结果证书失效,工作受阻,甚至被单位追责。今天就从【澳洲水电工证考试… · 2026/11/7 0:00:41
电工作业提示版通过率揭秘:怎么考才能一次过? 电工作业提示版通过率揭秘:怎么考才能一次过? 怕考不过白交培训费?别急,今天我就从驻马店应届工程类毕业生的视角,带你全面了解电工作业提示版的考试流程、备考要点和真实通过率,帮你少走弯路、提高一次通过率。… · 2026/11/7 0:00:41
电工证年审报名千万别踩坑 外省证转过来要搞清这几点 电工证年审报名千万别踩坑 外省证转过来要搞清这几点 之前考的证在外省能不能转过来?这个问题是很多电工从业者最关心的,特别是像你这样在商丘从事公路工程的人员,经常需要跨省流动,证书的 有效性 和 可迁移性… · 2026/11/7 0:00:41
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 10:29:23