#!/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登录相关推荐

  1. python 12306登录_python爬虫--模拟12306登录

    模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...

  2. python 12306登录 2019_python爬虫--模拟12306登录

    模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...

  3. Python小姿势 - # Python网络爬虫之如何通过selenium模拟浏览器登录微博

    Python网络爬虫之如何通过selenium模拟浏览器登录微博 微博登录接口很混乱,需要我们通过selenium来模拟浏览器登录. 首先我们需要安装selenium,通过pip安装: ``` pip ...

  4. selenium处理12306登录

    selenium处理12306登录 使用edge浏览器驱动 from selenium.webdriver import Edge from selenium.webdriver.common.act ...

  5. selenium 模拟人工登录 高德开发者平台(python)

    使用selenium模拟人工登录高德开发者平台. 1.自动输入账户.密码 2.自动模拟拖拽滑块验证 3.自动提交 from selenium import webdriver from seleniu ...

  6. 利用selenium模拟自动登录链家、贝壳、安居客等网站(超级实用,推荐收藏!)

    大家好, 今天跟大家分享一个利用selenium模拟自动登录王连某家.an聚客等网站. 文章内容超级实用,尽快在小本本上记录下来哟. 特别说明,以下代码仅用于交流学习,不做其他商业用途,切记切记! 上 ...

  7. 用selenium模拟浏览器登录淘宝识别滑动验证码

    用selenium模拟浏览器登录淘宝,使用账号密码的方式登录淘宝,但是在登录的时候遇到需要滑动验证,使用selenium模拟点击滑块,滑动验证码完成登录. 本文的代码现测可用.做个记录,方便以后查看. ...

  8. python 模拟浏览器selenium_python爬虫10:使用selenium模拟浏览器登录账号

    需求背景: 很多网页通过复杂的JS函数组合,来实现对信息的加密.异步信息处理等,导致很难分析出网页接口. 那么最快速度的实现爬虫功能,是模拟浏览器的行为,加载运行JS,才能破解页面. 模拟浏览器行为, ...

  9. 使用selenium模拟动态登录QQ邮箱爬取收件箱内容放在CSV文件中

      获取收件箱列表信息就是使用selenium实现模拟登录.点击收件箱链接.获取收件箱列表的html过程,然后就是正常的查找数据 1.我们首先就是要登录到QQ邮箱中,然后找到收件箱的页面的,才能爬取到 ...

最新文章

  1. cylance做的机器学习相关材料汇总
  2. shiro的用户认证
  3. c enum能像java一样吗_不一样的Java Enum
  4. [机器学习-回归算法]一元线性回归用最小二乘法的推导过程
  5. 【Elasticsearch】将 term查询的 integer 字段改成 keyword之后, must 再改成 filter,就造成query_cache剧降
  6. 语录帝——要想人前显贵,必须背地里遭罪
  7. Windows 10部署与管理指南(1)之环境准备篇
  8. 3┃音视频直播系统之浏览器中通过 WebRTC 直播视频实时录制回放下载
  9. 迅为恩智浦iTOP-IMX6开发平台
  10. adobe cs5中文补丁 indesign_indesign cs5下载_Adobe InDesign CS5简体中文版下载 - 下载之家...
  11. ping得到ipv4与ipv6地址
  12. acwing 95. 费解的开关(蓝桥杯)
  13. Flex弹性盒子的项目属性
  14. stm32L152 使用内部内部flash做EEPROM 出FLASH_ERROR_WRP问题及解决办法
  15. C#:实现 Van Eck‘s sequence范·艾克序列算法(附完整源码)
  16. java实现画笔的画圆与矩形功能_Java实现画线、矩形、椭圆、字符串功能
  17. 开发人员为何应该使用苹果电脑,兼Mac OS X
  18. Java面向对象编程-模拟购物车模块
  19. 新浪大赚,阿里吃亏------剖析阿里巴巴入股新浪微博
  20. 东北大学清退52名博士生研究生!其中一学生已读博18年之久

热门文章

  1. 程序设计思维与实践 月模拟题3 Blog
  2. JVM成神之路-JVM内存结构
  3. 小米2+android版本,小米2/2S Android 4.4.2刷机详细教程
  4. 将Spring Boot应用程序注册成为系统服务
  5. Methods to Control Your Own Feelings One
  6. 多个西瓜视频怎么批量管理?
  7. gcc降版本方法 - [学习]
  8. Mac系统打不开appstore怎么办
  9. 一张图学Python
  10. 冷暖自知!看完这篇区块链媒体舆情报告,想说点啥?