2.2.9 12306火车订票验证码处理

本文探讨了在自动化测试中如何处理12306火车订票的图片验证码。通过分析12306页面,可以获取base64编码的验证码图片数据流,再转换成字节流保存。利用第三方服务器识别验证码,获取图序号后模拟点击。文章还详细解释了坐标转换和点击操作的方法。
摘要由CSDN通过智能技术生成

前言

       在实现自动化测试时,最为困难的就是验证码处理;那么常规的验证码都进行处理和识别,那么如果是类似12306等图片识别的验证码的话如何实现?那么今天小编就给大家分析下12306验证码如何实现自动化。

 

获取12306验证码图片

       按照常规思路无非两种,将截取的验证码图片发送给第三方服务器,然后通过第三方服务器进行识别后将结果进行返回;要么就是自己通过机器识别的方式不断进行学习,写大量的识别库然后完成识别操作;第二种方式耗时耗力,显然不可取,所以大部分都是选择第三方服务器进行完成;

       验证码图片的获取可以通过传统的Pillow模块完成图片的截取操作;但是此种方式会出现失真(是图片的质量下降,模糊),所以此处为了提高其图片的质量,可以直接获取图片的文件流对象,然后自己将文件流对象转换成图片的过程;

       通过分析系12306页面,使用元素定位发现验证码的src属性是可以直接获取对应图片通过base64加密的数据流,如果能够将此数据流转换成字节流,然后保存成图片不就获取到原始图片了。

那么获取到src属性的结果值则可以通过下面代码完成:

  self.get_code_elment=WebDriverWait(self.get_driver,5).until(lambda driver:driver.find_element_by_id("J-loginImg"))  get_src=self.get_code_elment.get_attribute("src")

但是得到的结果是base64编码数据流,所以可以通过base模块完成数据流转换成字节流,定义一个方法封装后即可获取到对应验证码图片

​​​​​​​

    def  get_code_image(self):        self.get_driver.find_element_by_class_name("login-hd-account").click()        try:            self.get_code_elment=WebDriverWait(self.get_driver,5).until(lambda driver:driver.find_element_by_id("J-loginImg"))            #此处src数据加载问题            time.sleep(3)            get_src=self.get_code_elment.get_attribute("src")            #得到base64格式编码数据            get_base64=get_src.split(",")[-1]            #获取到bytes对象,文件、图像实际都是基于byte流            get_byte
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zemuerqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值