:Chaojiying.py + DrissionPage 实现【古诗文网图片验证码自动识别免登录】保姆级实战教程)
一、 前置回顾承接上篇文章承接上篇超级鹰账号注册、充值、获取 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 模拟鼠标拖动滑块完成验证完整源码解析敬请期待欢迎关注评论区交流踩坑经历