Mac 模拟登陆12306
模拟登录12306
结构
1.访问首页,将浏览器窗口最大化
2.找到并点击账号登录,截取全局图片,获得验证码位置坐标,通过该坐标从全局图片里截取验证码图片
3.调用识别平台,返回结果
4.拆分坐标,找到对应位置并选中
5.填入账号密码,立即登录
实现
from selenium import webdriver
from time import sleep
from PIL import Image # 截图
from chaojiying import Chaojiying_Client
from selenium.webdriver import ActionChainswc = webdriver.Chrome()
wc.implicitly_wait(10)try:wc.get('https://kyfw.12306.cn/otn/resources/login.html')# 窗口最大化wc.maximize_window()# 点击账号登录act_btn = wc.find_element_by_partial_link_text('账号登录')act_btn.click()sleep(2)# 截图wc.save_screenshot('./main.png')# 验证码位置sleep(2)img_y = wc.find_element_by_id('J-loginImg')sleep(2)print('size:',img_y.size)print('location:',img_y.location)size = img_y.sizelocation = img_y.location# 验证码图片位置坐标# Mac分辨率放大,*2后获得准确位置img_location = (int(location['x'] *2),int(location['y']*2),int(location['x'] *2 + size['width']*2),int(location['y'] *2 + size['height']*2))print(img_location)# 打开截取的大图i = Image.open('./main.png')code_img_name = './code.png'# 捕捉验证码坐标部分frame = i.crop(img_location)# 存图frame.save(code_img_name)chaojiying = Chaojiying_Client('username', 'password', 'id') # 用户中心>>软件ID 生成一个替换 96001im = open('code.png', 'rb').read() # 本地图片文件路径 来替换 a.jpgres =chaojiying.PostPic(im, 9004)print('res:',res)result = res['pic_str']print('result:',result)all_list = []if '|' in result:list_1 = result.split('|')count_1 = len(list_1)for i in range(count_1):xy_list = []x = int(list_1[i].split(',')[0])y = int(list_1[i].split(',')[1])xy_list.append(x)xy_list.append(y)all_list.append(xy_list)else:x = int(result.split(',')[0])y = int(result.split(',')[1])xy_list = []xy_list.append(x)xy_list.append(y)all_list.append(xy_list)print(all_list)for a in all_list:x = a[0]y = a[1]print('x,y:',x,y)ActionChains(wc).move_to_element_with_offset(img_y,x,y).click().perform()sleep(1)username = wc.find_element_by_id('J-userName')username.send_keys('username')password = wc.find_element_by_id('J-password')password.send_keys('password')sleep(3)submit = wc.find_element_by_id('J-login')submit.click()sleep(10)except Exception as e:print(e)finally:wc.quit()
问题及解决
1.screenshot does not match file type. It should end with a .png
在截图时先用了save_screenshot('./main.jpg')
结果报错,把存储格式改为png就行
2.截图偏差
在截取验证码部分时尝试了很多次都没有截到验证码正确的部分,第一反应是验证码坐标定位错误,使用xpath、CSS、id都定位了还是J-loginImg
查了很久之后发现可能是跟屏幕分辨率有关系,Mac - 显示器 - 屏幕,可以选缩放,我还是保持显示器默认,就在代码里改。
根据截图位置(这一部分图片没保存……)和验证码位置推算,尝试添加倍数,应该是在长宽的基础上都*2。
3.点击验证码出错,一个是超级鹰返回的验证码坐标重复,一个是只能定位到最后一个坐标,一个是click()点击失效
尝试在x,y坐标上*2,将移动元素修改为坐标位置,开始报错move target out of bounds
,move_to requires a WebElement
可能是没有更换cookie和UA的原因,验证太多次12306也开始报错
最后修改为原代码,反复测试后可行 (……………………)
Mac 模拟登陆12306相关推荐
- 使用Python模拟登陆12306并全自动下单
最近一段时间一直在研究用Python模拟登陆12306网站并自动刷票下单,经过一段时间的摸索,终于完成了代码,实现了12306刷票的功能.话不多说,先给大伙儿看看成果.我录制了一段时间,展示了自动刷票 ...
- Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】
登陆时间:2019-10-21 实现难度:★★★☆☆☆ 请求链接:https://kyfw.12306.cn/otn/resources/login.html 实现目标:模拟登陆中国铁路12306,攻 ...
- php selenium模拟登陆,12306 的selenium实现模拟登陆
# 下面是12306 实现的模拟登陆 # 解码 应用超级鹰,注册用户,左侧栏软件ID进去,开启一个新软件,拿到软件ID # 下面测试都在jupyter里面实现 # 超级鹰类 cell import r ...
- 以selenium模拟登陆12306
初级模拟,速度有点慢,后期有时间再优化 1 # -*- coding:utf-8 -*- 2 # author:zxy 3 # date:2018-12-23 4 5 from selenium im ...
- 模拟登陆 12306网站
准备目标网站 :https://kyfw.12306.cn/otn/login/init安装PIL模块: pip3 install pillow 或 pip3 --default-timeout=10 ...
- 模拟登陆 - 破解12306验证码
12306模拟登陆demo: 用selenium来进行模拟登陆操作,主要是这个验证码部分. https://kyfw.12306.cn/otn/resources/login.html 这个验证码解决 ...
- 12306模拟登陆Python3.x+cookiejar+request
代码传到GitHub上了链接 https://github.com/MrYHM/python-12306 这里就不展示了,只讲一讲思路. 1.cookie的处理 其实urllib在open函数内部创建 ...
- Scrapy 模拟登陆知乎--抓取热点话题
工具准备 在开始之前,请确保 scrpay 正确安装,手头有一款简洁而强大的浏览器, 若是你有使用 postman 那就更好了. Python 1 scrapy genspider zhihu 使用以 ...
- python模拟登陆 验证码el_python 模拟登陆github的示例
# -*- coding: utf-8 -*- # @Author: CriseLYJ # @Date: 2020-08-14 12:13:11 import re import requests c ...
最新文章
- Simple Dynamic Strings(SDS)源码解析和使用说明一
- 【Android】ViewPager实现无限循环滚动
- LeetCode: 344. Reverse String
- Cacti(一)之“better-cacti-templates”
- debian下安装LNMP(三)
- 深入浅出python机器学习_9.1.5_通过数据预处理提高模型的准确率_MinMaxScaler
- JavaWeb-综合案例(用户信息)-学习笔记04【删除选中功能】
- codeforces gym100959 I - Robots(稠密图建图优化)
- db2 sql 判断select是否为空_学会复杂一点的SQL语句:Oracle DDL和DML
- Notice: Undefined offset 的解决方法
- 计算机组成原理fpga实验指导书,计算机组成原理 FPGA实验指导书.doc
- java迭代遍历_JAVA集合中的迭代器的遍历
- 查看GCC编译优化的具体选项开关
- 计算机二级vfp程序语言,2012年计算机二级VFP语言基础学习教程
- WEB安全之代码安全----ESAPI
- 用python写生日快乐说说_生日快乐的说说(精选50句)
- 乘幂法求主特征值和特征向量(C++)
- 基于树莓派语音控制—LED开关控制
- 0ctf-2017-pwn-char 题解
- Proteus仿真-51单片机最小系统点亮LED