利用Python与selenium自动化模拟登陆12306官网!
近年来,12306的反爬越来越来严重,从一年前的 获取tk参数后到现在增加了 JS、CSS等加密方式!
目前大部分人利用的登陆方式都是利用selenium ,此文也不例外。
环境:
Windows
python 3.6.5
模块:
selenium
pyautogui
time
第一步:
实例化一款浏览器,并进入到12306官网

driver = webdriver.Chrome()
driver.get('https://kyfw.12306.cn/otn/resources/login.html')
driver.implicitly_wait(10)
driver.maximize_window()
第二步:
点击账号登陆
driver.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]').click()

第三步:
在输入框中,模拟输入账号密码:
driver.find_element_by_xpath(')
driver.find_element_by_xpath(')

第四步:
当账号密码输入完毕后,我们应该要做的就是 模拟点击验证码图片了!
那么首先把图片下载下来:
yzm_code = driver.find_element_by_xpath('/html/body/div[2]/div[2]/div[1]/div[2]/div[3]/div')
yzm_code.screenshot('yzm.png')

第五步:
验证码下载下来后就可以为所欲为了,不管是对接打码平台也好,自己训练模型,或者利用代码模拟点击也是可以的!
前面两种方法根本没法讲,所以这里采用第三种方式,进行模拟点击。
在这里 说说我们需要达到的效果,验证码上总共有8张图,那么我想达到的效果就是我输入1,2,3那么程序自动点击1,2,3三张图片。
所以我们先获取到每个图片的中心点坐标,这里是有规律的,聪明人肯定一看就懂了。
我这里这个是随便写的:
code = input('请输入验证码:')
time.sleep(5)
point_map = {
': '40,45',
': '116,53',
': '257,50',
': '40,121',
': '116,133',
': '185,52',
': '185,132',
': '257,130'
}
def get_point(indexs):
indexs = indexs.split(',')
temp = []
for index in indexs:
temp.append(point_map[index])
print(temp)
return temp
temp = get_point(code)
这两串代码就不解释了,很基础的东西。
最终的效果就是 输入1,2 那么得到的是一个列表:
[ '40,45','116,53']
记住,这个坐标只是 验证码图片上的坐标,不是整个屏幕的全局坐标!!!!
那么如何取全局坐标?验证码顶点(1206,428)+验证码的坐标,即全局坐标!这里的 (1206,428)请自行测试!

第六步:
模拟点击,利用到pyautogui这个模块。切记,利用此模块前一定要加延迟进行画面切换。
(此文只做方法学习,并没有任何其它意思,正常情况都是对接打码平台!希望大家能学以致用,在其它的编程过程中用的到这些方法!)
for i in temp:
indexs = i.split(',')
x = int(indexs[0])
y = int(indexs[1])
pyautogui.click(1206+x, 428+y)
最后点击登录即可!
driver.find_element_by_xpath('//*[@id="J-login"]').click()
利用Python与selenium自动化模拟登陆12306官网!的更多相关文章
- Python+Selenium自动化-模拟键盘操作
Python+Selenium自动化-模拟键盘操作 0.导入键盘类Keys() selenium中的Keys()类提供了大部分的键盘操作方法:通过send_keys()方法来模拟键盘上的按键. # ...
- Python+Selenium自动化 模拟鼠标操作
Python+Selenium自动化 模拟鼠标操作 在webdriver中,鼠标的一些操作如:双击.右击.悬停.拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就 ...
- 验证码破解 | Selenium模拟登陆12306
12306官网登录的验证码破解比较简单,验证码是常规的点触类型验证码,使用超级鹰识别率比较高. 思路: (1)webdriver打开浏览器: (2)先对整个屏幕截屏,通过标签定位找到验证码图片,并定位 ...
- 如何利用python实现报表自动化?让你更高效的完成工作内容
如果能够实现报表自动化,那我们将节约不少的时间,更高效的完成工作内容.那么,如何利用python实现报表自动化呢?本文将介绍xlwt .xlrd.xlutils的常用功能,xlwt写Excel时公式的 ...
- Python爬虫教程-15-读取cookie(人人网)和SSL(12306官网)
Python爬虫教程-15-爬虫读取cookie(人人网)和SSL(12306官网) 上一篇写道关于存储cookie文件,本篇介绍怎样读取cookie文件 cookie的读取 案例v16ssl文件:h ...
- 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)
利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录) 作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...
- 【Python爬虫】教务处模拟登陆
Python2模拟登陆获取cookie import urllib import urllib2 import cookielib filename = 'cookie.txt' #声明一个Mozil ...
- Python Selenium + phantomJS 模拟登陆教务管理系统 “抢课”
# _*_coding:utf-8_*_ from selenium import webdriver from selenium.webdriver.common.action_chains imp ...
- 人人贷网的数据爬取(利用python包selenium)
记得之前应同学之情,帮忙爬取人人贷网的借贷人信息,综合网上各种相关资料,改善一下别人代码,并能实现数据代码爬取,具体请看我之前的博客:http://www.cnblogs.com/Yiutto/p/5 ...
随机推荐
- flutter无线调试与打包
1.WIFI连接设备 设备打开开发者选项 -> 点击WIFI调试 -> 项目目录下输入终端命令: adb connect 设备ip地址:[端口号(一般是5555)] 2.apk打包 ...
- ParquetDecodingException: Can not read value at 0 in block -1 in file hdfs:...
: jdbc:hive2://master01.hadoop.dtmobile.cn:1> select * from cell_random_grid_tmp2 limit 1; INFO : ...
- Python AttributeError: 'Module' object has no attribute 'STARTF_USESHOWINDOW'
夫学须志也,才须学也,非学无以广才,非志无以成学.--诸葛亮 生活有度,自得慈铭 --杜锦阳 今天新来的同事安装环境遇到个莫名其妙的问题: AttributeError: 'Module' objec ...
- 一本通 P1486 【黑暗城堡】
题库 :一本通 题号 :1486 题目 :黑暗城堡 link :http://ybt.ssoier.cn:8088/problem_show.php?pid=1486 思路 :这道题既然要求使加入生成 ...
- python语言输入
# 系统客户端包 import win32com.client speaker = win32com.client.Dispatch("SAPI.SPVOICE") # 系统接口 ...
- 2019nc#10
题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Blackjack 点击查看 背包DP 32/109 补好了 B Coffee Chicken 点击查看 进入讨论 738/2992 通过 ...
- HDU- 6437.Videos 最“大”费用流 -化区间为点
参考和完全学习:http://www.cnblogs.com/xcantaloupe/p/9519617.html HDU-6437 题意: 有m场电影,电影分为两种,看一场电影可以得到对应的快乐值. ...
- lightoj 1226 - One Unit Machine(dp+大组合数去摸)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1226 题解:由于这些任务完成是有先后的所以最后一个完成的肯定是最后一个任务的子 ...
- 移位密码(加密+解密)C++实现
移位密码 加密C=Ek(m)=m+k mod 26 解密m=Dk(m)=c-k mod 26 密钥空间|k|=26=|c|=|m| #include<iostream> #include& ...
- 【Redis】集群方式
一.概述 1.1 Redis3.0版本之前 1.2 常见集群方案 二.Redis-Cluster原理 三.搭建集群方案 3.1 准备工作 3.2 创建模拟集群的文件夹 3.3 复制脚本 3.4 复制一 ...