selenium模拟12306登录
#!/usr/bin/env python
# coding:utf-8
import requests
from hashlib import md5
from selenium import webdriver
import time
from PIL import Image
from selenium.webdriver import ActionChains
# 12306模拟登录过程
# 使用selenium打开登陆界面,对当前selenium打开的界面截图
# 对当前图片局部区域(验证码照片)进行裁剪,将验证码图片和模拟登录进行对应
# 使用超级鹰识别验证码获取图片坐标
class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernamepassword = password.encode('utf8')self.password = md5(password).hexdigest()self.soft_id = soft_idself.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()# chaojiying = Chaojiying_Client('g522627521', 'gxx963214785', '908202') # 用户中心>>软件ID 生成一个替换 96001
# im = open('12306.jpg', 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
# print(chaojiying.PostPic(im, 9004)['pic_str']) # 1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()# 使用selemium打开界面
# 加载selenium需要的驱动
driver_path = r'D:\chromedriver2\chromedriver.exe'
options = webdriver.ChromeOptions()
out_path = r'D:\固件下载合集\固件\TPLINK' # 是你想指定的路径
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': out_path}
options.add_experimental_option('prefs', prefs)
#options.add_argument('window-size=1920x3000') # 指定浏览器分辨率
#options.add_argument('blink-settings=imagesEnabled=false') # 不加载图片
#options.add_argument('--headless') #浏览器不提供可视化页面
driver = webdriver.Chrome(executable_path=driver_path, options=options)
url = 'https://kyfw.12306.cn/otn/login/init'
driver.get(url)
time.sleep(3)# 对当前打开的页面截图
driver.save_screenshot('aa.png')# 确定验证码图片对应的左上角和右下角对应的坐标(裁剪的区域)
code_img_ele = driver.find_elements_by_xpath('//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img')location = code_img_ele.location # 返回的是验证码左上角的坐标
size = code_img_ele.size # 验证码标签对应的长和宽
# 左上角和右下角的坐标
rangle = (int(location['x']), int(location['y']), int(location['x'] + size['width']), int(location['y'] + size['height']))
# 至此验证码图片区域确定下来
# 实例化image对象
i = Image.open('./aa.png')
code_img_name = './code.png'
# crop根据指定区域进行裁剪
frame = i.crop(rangle)
frame.save(code_img_name)# 将验证码码图片提交给超级鹰
chaojiying = Chaojiying_Client('g522627521', 'gxx963214785', '908202') # 用户中心>>软件ID 生成一个替换 96001
im = open('code.png', 'rb').read() # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
print(chaojiying.PostPic(im, 9004)['pic_str']) # 1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()
all_list = [] # 要存储即将被点击的点的坐标 [[x1,y1],[x2,y2]]
result = chaojiying.PostPic(im, 9004)['pic_str']
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)
# 遍历链表,使用动作链对每一个列表元素对应的x,y指定的位置进行点击操作
for l in all_list:x = l[0]y = l[1]ActionChains(driver).move_to_element_with_offset(code_img_ele, x, y).click().perform()time.sleep(0.5)
driver.find_element_by_id('username').send_keys('xxxxxx')
time.sleep(1)
driver.find_element_by_id('password').send_keys('xxxxxx')
time.sleep(1)
driver.find_element_by_id('loginSub').click()
time.sleep(2)
driver.quit()
selenium模拟12306登录相关推荐
- python 12306登录_python爬虫--模拟12306登录
模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...
- python 12306登录 2019_python爬虫--模拟12306登录
模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...
- Python小姿势 - # Python网络爬虫之如何通过selenium模拟浏览器登录微博
Python网络爬虫之如何通过selenium模拟浏览器登录微博 微博登录接口很混乱,需要我们通过selenium来模拟浏览器登录. 首先我们需要安装selenium,通过pip安装: ``` pip ...
- selenium处理12306登录
selenium处理12306登录 使用edge浏览器驱动 from selenium.webdriver import Edge from selenium.webdriver.common.act ...
- selenium 模拟人工登录 高德开发者平台(python)
使用selenium模拟人工登录高德开发者平台. 1.自动输入账户.密码 2.自动模拟拖拽滑块验证 3.自动提交 from selenium import webdriver from seleniu ...
- 利用selenium模拟自动登录链家、贝壳、安居客等网站(超级实用,推荐收藏!)
大家好, 今天跟大家分享一个利用selenium模拟自动登录王连某家.an聚客等网站. 文章内容超级实用,尽快在小本本上记录下来哟. 特别说明,以下代码仅用于交流学习,不做其他商业用途,切记切记! 上 ...
- 用selenium模拟浏览器登录淘宝识别滑动验证码
用selenium模拟浏览器登录淘宝,使用账号密码的方式登录淘宝,但是在登录的时候遇到需要滑动验证,使用selenium模拟点击滑块,滑动验证码完成登录. 本文的代码现测可用.做个记录,方便以后查看. ...
- python 模拟浏览器selenium_python爬虫10:使用selenium模拟浏览器登录账号
需求背景: 很多网页通过复杂的JS函数组合,来实现对信息的加密.异步信息处理等,导致很难分析出网页接口. 那么最快速度的实现爬虫功能,是模拟浏览器的行为,加载运行JS,才能破解页面. 模拟浏览器行为, ...
- 使用selenium模拟动态登录QQ邮箱爬取收件箱内容放在CSV文件中
获取收件箱列表信息就是使用selenium实现模拟登录.点击收件箱链接.获取收件箱列表的html过程,然后就是正常的查找数据 1.我们首先就是要登录到QQ邮箱中,然后找到收件箱的页面的,才能爬取到 ...
最新文章
- cylance做的机器学习相关材料汇总
- shiro的用户认证
- c enum能像java一样吗_不一样的Java Enum
- [机器学习-回归算法]一元线性回归用最小二乘法的推导过程
- 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
- 语录帝——要想人前显贵,必须背地里遭罪
- Windows 10部署与管理指南(1)之环境准备篇
- 3┃音视频直播系统之浏览器中通过 WebRTC 直播视频实时录制回放下载
- 迅为恩智浦iTOP-IMX6开发平台
- adobe cs5中文补丁 indesign_indesign cs5下载_Adobe InDesign CS5简体中文版下载 - 下载之家...
- ping得到ipv4与ipv6地址
- acwing 95. 费解的开关(蓝桥杯)
- Flex弹性盒子的项目属性
- stm32L152 使用内部内部flash做EEPROM 出FLASH_ERROR_WRP问题及解决办法
- C#:实现 Van Eck‘s sequence范·艾克序列算法(附完整源码)
- java实现画笔的画圆与矩形功能_Java实现画线、矩形、椭圆、字符串功能
- 开发人员为何应该使用苹果电脑,兼Mac OS X
- Java面向对象编程-模拟购物车模块
- 新浪大赚,阿里吃亏------剖析阿里巴巴入股新浪微博
- 东北大学清退52名博士生研究生!其中一学生已读博18年之久