(九)selenium实现12306模拟登录

登陆的唯一困难在于验证码的识别,此处使用第三方平台超级鹰进行验证码识别。
from selenium import webdriver
import time
from PIL import Image
from selenium.webdriver import ActionChains
import requests
from hashlib import md5 from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions class Chaojiying_Client(object):
"""超级鹰源代码""" def __init__(self, username, password, soft_id):
self.username = username
password = password.encode('utf8')
self.password = md5(password).hexdigest()
self.soft_id = soft_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)',
} def PostPic(self, im, codetype):
"""
im: 图片字节
codetype: 题目类型 参考 http://www.chaojiying.com/price.html
"""
params = {
'codetype': codetype,
}
params.update(self.base_params)
files = {'userfile': ('ccc.jpg', im)}
r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files,
headers=self.headers)
return r.json() def ReportError(self, im_id):
"""
im_id:报错题目的图片ID
"""
params = {
'id': im_id,
}
params.update(self.base_params)
r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
return r.json() # 检测规避
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option) bro = webdriver.Chrome(executable_path='./chromedriver.exe')
# 最大化屏幕
bro.maximize_window() # 发送请求
bro.get('https://kyfw.12306.cn/otn/resources/login.html') # 找到账号的登陆的标签
btn = bro.find_elements_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a')[0]
btn.click()
time.sleep(2) # 将当前页面截屏生成图片
bro.save_screenshot('12306.png') # 定位到要截取的图片
pic = bro.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div[2]/div[3]/div/div[4]/img')
# 得到当前图片的左上角坐标
location = pic.location
# 得到图片的长和宽
size = pic.size
# 得到图片左上角和右下角的坐标 截图准确度与电脑缩放布局有关 当前为125%
rangle = (location['x'] * 1.25, location['y'] * 1.25, (location['x'] + size['width']) * 1.25,
(location['y'] + size['height']) * 1.25) # 保存生成的验证码图片
i = Image.open('./12306.png')
code_img_name = 'code.png' # 裁剪文件的文件名称
frame = i.crop(rangle) # 根据指定区域进行裁剪
frame.save(code_img_name) # 利用超级鹰识别验证码
chaojiying = Chaojiying_Client('Mrterrific', 'WQ2017617sxy', ' 905993')
im = open('./code.png', 'rb').read()
result = chaojiying.PostPic(im, 9004)['pic_str']
all_list = [] if '|' in result:
# 多个结果
print(result)
ret_list = result.split('|') # 148,102|236,203
for ret in ret_list:
# 将一组坐标放入列表
x_y = []
x = ret.split(',')[0]
y = ret.split(',')[0]
x_y.append(x)
x_y.append(y)
all_list.append(x_y)
else:
x_y = []
x = result.split(',')[0]
y = result.split(',')[0]
x_y.append(x)
x_y.append(y)
all_list.append(x_y) for ret in all_list:
x = int(ret[0])
y = int(ret[1])
ActionChains(bro).move_to_element_with_offset(pic, x, y).click().perform()
# 以图片对象为参考系 将鼠标移动到相对图片x,y处 点击图片
time.sleep(0.5) bro.find_element_by_id('J-userName').send_keys('xxxx')
bro.find_element_by_id('J-password').send_keys('ssss')
bro.find_element_by_id('J-login').click()
time.sleep(3)
bro.quit()
(九)selenium实现12306模拟登录的更多相关文章
- 4、python+selenium实现12306模拟登录
简介: 这里是利用了selenium+图片识别验证,来实现12306的模拟登录,中间也参考了好几个项目,实现了这个小demo,中间也遇到了很多的坑,主要难点在于图片识别和滑动验证这两个方面,图片识别是 ...
- 使用Selenium对新浪微博模拟登录
Selenium的配置 在项目中引入Selenium库 下载chromedriver.exe 在项目代码中加入chromedriver位置的配置 使用Selenium Selenim语法 智能等待 隐 ...
- selenium跳过webdriver检测并模拟登录淘宝
目录 简介 编写思路 使用教程 演示图片 源代码 @(文章目录) 简介 模拟登录淘宝已经不是一件新鲜的事情了,过去我曾经使用get/post方式进行爬虫,同时也加入IP代理池进行跳过检验,但随着大型网 ...
- 4 使用Selenium模拟登录csdn,取出cookie信息,再用requests.session访问个人中心(保持登录状态)
代码: # -*- coding: utf-8 -*- """ Created on Fri Jul 13 16:13:52 2018 @author: a " ...
- 3 使用selenium模拟登录csdn
之前通过F12开发者模式调试,获取网站后台服务器验证用户名和密码的URL之后,再构造post数据的方式会存在一个问题,就是对目标网站的验证机制不明确,构造post数据除了用户名和密码之外,还可能有更复 ...
- 使用selenium模拟登录知乎
网上流传着许多抓取知乎数据的代码,抓取它的数据有一个问题一定绕不过去,那就是模拟登录,今天我们就来聊聊知乎的模拟登录. 获取知乎内容的方法有两种,一种是使用request,想办法携带cookies等必 ...
- 使用Python+Selenium模拟登录QQ空间
使用Python+Selenium模拟登录QQ空间爬QQ空间之类的页面时大多需要进行登录,研究QQ登录规则的话,得分析大量Javascript的加密解密,这绝对能掉好几斤头发.而现在有了seleniu ...
- selenium模拟登录豆瓣和qq空间
selenium模拟登录豆瓣和qq空间今天又重新学习了下selenium,模拟登录豆瓣,发现设置等待时间真的是很重要的一步,不然一直报错:selenium.common.exceptions.NoSu ...
- 模拟登录神器之PHP基于cURL实现自动模拟登录类
一.构思 从Firefox浏览器拷贝cURL命令(初始页.提交.提交后) 自动分析curl形成模拟登录代码 默认参数:ssl/302/gzip 二.实现 接口 (一)根据curl信息执行并解析结果 p ...
- PHP cURL应用实现模拟登录与采集使用方法详解
对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...
随机推荐
- 动态尺寸模型优化实践之Shape Constraint IR Part I
简介: 在本系列分享中我们将介绍BladeDISC在动态shape语义下做性能优化的一些实践和思考.本次分享的是我们最近开展的有关shape constraint IR的工作,Part I 中我们将介 ...
- OpenYurt 之 Yurthub 数据过滤框架解析
简介:OpenYurt 是业界首个非侵入的边缘计算云原生开源项目,通过边缘自治,云边协同,边缘单元化,边缘流量闭环等能力为用户提供云边一体化的使用体验.在 Openyurt 里边缘网络可以使用数据过滤 ...
- Linux系统诊断-内存基础
简介: Linux系统诊断-内存基础 1. 背景 谈及linux内存,很多时候,我们会关注free,top等基础命令.当系统遇到异常情况时,内存问题的根因追溯,现场诊断时,缺乏深层次的debug能力. ...
- 如何用 Nacos 构建服务网格生态
简介: Nacos 在阿里巴巴起源于 2008 年五彩石项目(该项目完成微服务拆分和业务中台建设),成长于十年的阿里双十一峰值考验,这一阶段主要帮助业务解决微服务的扩展性和高可用问题,解决了百万实例 ...
- Ubuntu VNC 远程桌面及常见问题
一.Ubuntu 远程桌面开启 在ubuntu 设置中打开远程桌面 **注意:如果没有共享桌面选项也不要谎,只需要安装 vino 即可 sudo apt update sudo apt install ...
- Xcode编译WebKit
下载WebKit源码 1)进入https://webkit.org/ 2)点击页面的 Get Started 进入新页面,如下图所示 3)点击 Getting the code 进入新页面,如下图所示 ...
- FileInputStream和FileOutputStream
FileInputstream 字节输入流 用于文件内容的读取操作. 创建FileInputstream对象用于读取文件内容,使用后需要进行关闭操作 常用方法: read(); //每次仅读取一个字节 ...
- grads读取nc格式文件
一.通常: 1.grads读取grd和ctl:open ****.ctl 2.执行gs脚本:run ****.gs d命令,display展示数据,常用来显示变量,比如rh,rain等 q命令, ...
- iframe 高度设置为0时还有占位_iframe占位
iframe是一个内联元素,默认是跟baseline对齐的,iframe后边有个看不见.摸不着的行内空白节点,空白节点占据着高度,iframe与空白节点的基线对齐,导致了div被撑开,从而出现滚动条, ...
- 防止XSS(跨站脚本攻击)漏洞
点击查看代码 - 输入验证和过滤:对于用户输入的数据,进行严格的验证和过滤.可以使用正则表达式或其他验证方式,确保输入的数据符合预期的格式和内容.同时,对于特殊字符进行转义处理,防止恶意代码的注入. ...