#-*- coding:utf-8 -*-#
#-------------------------------------------------------------------------
#ProjectName: Python2020
#FileName: Get_Code_Image.py
#Author: mutou
#Date: 2020/6/16 20:53
#Description:获取12306验证码图片
#--------------------------------------------------------------------------
from Day18.BaseModule.Base_Class import BaseClass
from selenium.webdriver.support.ui import WebDriverWait
import sys
import base64
import os
import time
from Day22.get_path import get_image_path
from Day22.Code12306.Click_Code import CickCode
from selenium.webdriver.common.action_chains import ActionChains
class GetCodeImage(BaseClass):
def __init__(self,url,browserType,image_name):
super().__init__(url,browserType)
self.image_name=image_name
self.image_path=os.path.join(get_image_path,image_name)
self.location=[[-110,-30],[-40,-30],[40,-30],[110,-30],[-110,50],[-40,50],[40,50],[110,50]]
#获取12306验证码图片;最简单的方式就是通过Pillow模块完成验证码图片从首页中进行截取出来,直接截取出来的图片会影响图片的质量
#将图片变得模糊;如何提高图片质量的问题:图片都是以二进制数据进行传输的,如果能够直接获取图片的原二进制数据的话, 然后将二进制数据转写成
#一张图片,那么中间就不会发生质量问题;
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=base64.b64decode(get_base64)
print(self.image_path)
with open(self.image_path,mode="wb") as fp:
#既可以实现以二进制流的形式读和写两种操作
fp.write(get_byte)
except:
print(sys.exc_info())
#定义一个方法完成验证码的点击操作
def click_code(self,server_path,type):
#获取到第三方返回的结果
get_result_list=CickCode(server_path,type).up_image(self.image_path)
print(get_result_list)
#提取鼠标创建的对象
action=ActionChains(self.get_driver)
#遍历对应的图
for i in get_result_list:
#因为可以根据鼠标移动到指定的坐标点完成点击操作
#创建鼠标对象;此处的i表示的是第几幅图,而下面传入location中表示的是索引
get_value=self.location[int(i)-1]
#设定的坐标点是相对真个验证码图片而言,所以可以先讲鼠标对象移动到当前验证码元素对象上,然后实现偏移点击坐标点
action.move_to_element(self.get_code_elment).move_by_offset(get_value[0],get_value[1]).click()
#上面此种实现相当于完成每一次点击都重新创建一个鼠标对象。在程序开发中,实际是尽量的减少循环中创建对象;
#如果将鼠标创建对象提取的话,则必须将执行的动作于整个循环完毕后执行,否则在循环中有可能整个动作就已经被执行,则后续动作无法执行;
action.perform()
if __name__ == '__main__':
get=GetCodeImage("https://kyfw.12306.cn/otn/resources/login.html","Chrome","code.jpg")
# print(get.image_path)
get.get_code_image()
get.click_code("http://littlebigluo.qicp.net:47720/","Chrome")
#注意:两个模块的相互引用容易造成模块初始化错误
石明亮(JT)
- 粉丝: 390
- 资源: 8
最新资源
- 哈工大操作系统开卷内容整理
- PMSM负载估计 负载转矩预测文献复现 永磁同步电机负载转矩估计、PMSM负载转矩测量、负载预测、转矩预测的MATLAB simulink仿真模型,模型包可运行,配套9页的英文文献,部分章节已截图
- 内嵌式永磁同步电机复矢量电流调节器设计 针对内置式永磁同步电机d、q轴电流存在动态耦合的问题,在基于有效磁链概念得到IPMSM的复矢量数学模型,设计相应的复矢量电流调节器,实现了d、q轴电流的
- 西门子博途自动运料系统,程序采用S7-1200编写,MCGS进行组态,系统包括程序,组态,仿真,电气原理图,plc接线图,程序流程图,报告等
- Fluent电弧模型,电弧等离子体建模,二维40三维150入门电弧仿真模型案例,带视频讲解UDF,结果后处理,全套课程
- 电梯防标签贴标机sw19可编辑全套技术资料100%好用.zip
- [2016开源大赛(第一届)] A星寻路 源码 适合2D 2.5D无寻路功能游戏
- 三相PWM整流器双闭环仿真模型 模型中包含:主电路,坐标变,电压电流双环PI控制器,SVPWM控制 1.功率因数1,THD仅1.2% 2.模型闭环输出电压200VDC 3.输出功率调节输出电阻阻值计算
- install_flash_player_osx_ppapi.dmg
- 两句话实现一个网页游戏视频
- comsol弹性波晶体板能带计算,包含模态区分
- 地理大数据与人工智能课程论文.docx
- 电梯地坎托架-门楣三工位焊接工作站sw19全套技术资料100%好用.zip
- Boost+LLC级联型直流变器仿真模型 弥补boost变器非隔离特性以及LLC谐振变器电压范围窄的特性 输出电压闭环PI控制 matlab simulink等
- adobe全家桶,包含Windows和mac版本
- 无线充电系统S-S拓扑仿真模型 WPT 闭环控制,标准85k频率 均可实现输出电压的稳定调节 调移相角,调占空比两种控制 运行环境为matlab simulink matlab simulink
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈