Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】


  • 登陆时间:2019-10-21
  • 实现难度:★★★☆☆☆
  • 请求链接:https://kyfw.12306.cn/otn/resources/login.html
  • 实现目标:模拟登陆中国铁路12306,攻克点触验证码
  • 涉及知识:点触验证码的攻克、自动化测试工具 Selenium 的使用、对接在线打码平台
  • 完整代码:https://github.com/TRHX/Python3-Spider-Practice/tree/master/AutomationTool/12306-login
  • 其他爬虫实战代码合集(持续更新):https://github.com/TRHX/Python3-Spider-Practice
  • 爬虫实战专栏(持续更新):https://itrhx.blog.csdn.net/article/category/9351278

文章目录

  • 【1×00】思维导图
  • 【2×00】打码平台选择
  • 【3×00】初始化模块
    • 【3×01】初始化函数
    • 【3×02】账号密码输入函数
  • 【4×00】验证码处理模块
    • 【4×01】验证码图片剪裁函数
    • 【4×02】验证码坐标解析函数
    • 【4×03】模拟点击验证码函数
  • 【5×00】登录模块
  • 【6×00】完整代码
    • 【6×01】12306.py
    • 【6×02】chaojiying.py
  • 【7×00】效果实现动图

【1×00】思维导图

Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】

【2×00】打码平台选择

关于打码平台:在线打码平台全部都是人工在线识别,准确率非常高,原理就是先将验证码图片提交给平台,平台会返回识别结果在图片中的坐标位置,然后我们再解析坐标模拟点击即可,常见的打码平台有超级鹰、云打码等,打码平台是收费的,拿超级鹰来说,1元 = 1000题分,识别一次验证码将花费一定的题分,不同类型验证码需要的题分不同,验证码越复杂所需题分越高,比如 7 位中文汉字需要 70 题分,常见 4 ~ 6 位英文数字只要 10 题分,其他打码平台价格也都差不多,本次实战使用超级鹰打码平台

使用打码平台:在超级鹰打码平台注册账号,官网:http://www.chaojiying.com/ ,充值一块钱得到 1000 题分,在用户中心里面申请一个软件 ID ,在价格体系里面确定验证码的类型,先观察 12306 官网,发现验证码是要我们点击所有满足条件的图片,一般有 1 至 4 张图片满足要求,由此可确定在超级鹰打码平台的验证码类型为 9004(坐标多选,返回1~4个坐标,如:x1,y1|x2,y2|x3,y3), 然后在开发文档里面获取其 Python API,下载下来以备后用


【3×00】初始化模块

【3×01】初始化函数

定义 12306 账号()、密码()、超级鹰用户名()、超级鹰登录密码()、超级鹰软件 ID()、验证码类型(),登录页面 url ,谷歌浏览器驱动的目录(),浏览器启动参数等,将超级鹰账号密码等相关参数传递给超级鹰 API


【3×02】账号密码输入函数

分析页面可知,登陆页面默认出现的是扫描二维码登陆,所以要先点击账号登录,找到该 CSS 元素为 ,调用 方法实现模拟点击,此时出现账号密码输入框,同样找到其 ID 分别为 和 ,调用 方法输入账号密码


【4×00】验证码处理模块

为验证码处理模块的主函数

调用账号密码输入函数 ,等待账号密码输入完毕

调用验证码图片剪裁函数 ,得到验证码图片

利用超级鹰打码平台的 API 方法把图片发送给超级鹰后台,发送的图像是字节流格式,返回的结果是一个JSON,如果识别成功,典型的返回结果类似于:

其中, 就是识别的文字的坐标,是以字符串形式返回的,每个坐标都以 分隔

调用 函数解析超级鹰识别结果

调用 函数对符合要求的图片进行点击

调用模拟点击登录函数 ,点击登陆按钮模拟登陆

使用 语句判断是否出现了用户信息,判断依据是是否有用户姓名的出现,出现的姓名和实际姓名一致则登录成功,如果失败了就重试,超级鹰会返回该分值


【4×01】验证码图片剪裁函数

首先查找到验证码的坐标信息,先对整个页面截图,然后根据验证码坐标信息,剪裁出验证码图片

location 属性可以返回该图片对象在浏览器中的位置,坐标轴是以屏幕左上角为原点,x 轴向右递增,y 轴向下递增,size 属性可以返回该图片对象的高度和宽度,由此可以得到验证码的位置信息


【4×02】验证码坐标解析函数

方法将超级鹰的验证码识别结果变成列表的形式


【4×03】模拟点击验证码函数

来源:ITBOB ? 鲍勃

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年9月18日
下一篇 2019年9月18日

相关推荐