利用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 ...
随机推荐
- angular8 + redux 管理状态
1. angular8.1.1 ----- package.json { "name": "angular-demo", "version" ...
- Delphi - cxGrid设定合并单元格
在cxGrid中选中需要合并的字段,单击F11调出属性控制面板,展开Options,设置CellMerging的Value为True.
- 使用SVN钩子强制提交日志和限制提交文件类型
Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...
- SpringMVC整合Apache Shiro
关于什么是Shiro,可以查看这篇文章http://www.cnblogs.com/Laymen/articles/6117751.html 一.添加maven依赖 <dependency> ...
- docker使用nginx反向代理springboot
docker运行nginx容器 快速安装运行 docker-hub文档 https://hub.docker.com/_/nginx 拉取nginx1.6.0 docker pull nginx:1. ...
- 洛谷-P1414 又是毕业季II -枚举因子
P1414 又是毕业季II:https://www.luogu.org/problemnew/show/P1414 题意: 给定一个长度为n的数列.要求输出n个数字,每个数字代表从给定数列中最合理地取 ...
- 牛客小白月赛 G 异或 找规律
链接:https://www.nowcoder.com/acm/contest/135/G来源:牛客网 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apoj ...
- Codeforces Round #385 (Div. 2) C - Hongcow Builds A Nation
题目链接:http://codeforces.com/contest/745/problem/C 题意:给出n个点m条边,还有k个不能连通的点,问最多能添加几条边. 要知道如果有n个点最多的边是n*( ...
- Spring中常用的23中设计模式
1.spring 中常用的设计模式有23中 分类 设计模式 创建型 工厂方法模式(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder).原型 ...
- Go语言基础之网络编程
现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其实是一个很庞大的领域,本 ...