python模拟12306购票_实现12306模拟登录--Python
1、首先要找出登录接口和图片生成、验证接口。
输入错误帐号密码、验证码,点击登录后会发生两个请求:
2、接下来研究如何验证验证码的
接着刚才操作,再次选择验证码某个图片点击登录,对比了一下刚才的验证链接,有个关键参数(answer)不同(如下图),通过多次请求发现answer参数其实是 坐标
多次尝试就知道每张图大概坐标(也可以通过QQ、微信截图来验证),如下图
接下来就验证一下是否正确:首先把图片下载下来,(人工)识别选择对应图片,输入坐标传参进行请求
import requests,base64
session = requests.session()
res_image = session.get('https://kyfw.12306.cn/passport/captcha/captcha-image64').json()
with open('code.jpg','wb') as f:
f.write(base64.b64decode(res_image["image"]))
code = input("坐标:")
code_data = {
'answer': code,
'rand': 'sjrand',
'login_site': 'E'
}
res_captcha = session.get('https://kyfw.12306.cn/passport/captcha/captcha-check',params=code_data)
print(res_captcha.text)
3、验证成功了就成功了一半,接下来请求登录。
在页面上选中正确的图片(验证码不通过不会触发login请求)后点击登录,抓取https://kyfw.12306.cn/passport/web/login 请求链接,查看携带什么参数请求,如下图
发现除了携带用户、密码外,还有固定参数appid,验证码坐标answer。
那来验证一下是否返回如图上信息:
login_data = {
'username': account,
'password': pwd,
'appid': 'otn',
'answer': code
}
res_login = session.post("https://kyfw.12306.cn/passport/web/login",data=login_data)
print(res_login.text)
结果返回了error html页面。(可能在某地方做了反爬)
于是加了headers:host、origin、referer、UA,还是不行.......
后来发现login链接有一大串cookie参数
再次点击登陆,查看两次的cookie变化,发现只有 RAIL_DEVICEID 的值没有变化,其它都是动态变的。那问题来了,这些cookie是如何得来的?
但是还没找到 RAIL_DEVICEID 的值,结果发现请求链接是隐藏在js文件里。
暂时无法获取,先手动配置RAIL_DEVICEID(将页面的复制下来),就可以登录成功(如下图)。
代码整理如下:
import requests
import base64
import time
import json
# from account import account,pwd
account='asdasd'
pwd='234234'
headers={
"Host": "kyfw.12306.cn",
"Referer": "https://kyfw.12306.cn/otn/resources/login.html",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.64 Safari/537.36",
}
def create_code():
codes = input("输入图片位置:")
coordinate = {
"1": "50,50",
"2": "110,50",
"3": "180,50",
"4": "240,50",
"5": "50,110",
"6": "110,110",
"7": "180,110",
"8": "240,110",
}
return ",".join([coordinate[i] for i in codes.split(" ")])
session=requests.Session()
session.get("https://kyfw.12306.cn/",headers=headers)
image_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand'
res_image = session.get(image_url,headers = headers)
with open('code.jpg','wb') as f:
f.write(base64.b64decode(res_image.json()["image"]))
captcha_url='https://kyfw.12306.cn/passport/captcha/captcha-check'
code = create_code()
code_data = {
'answer': code,
'rand': 'sjrand',
'login_site': 'E'
}
res_captcha = session.get(captcha_url,headers = headers,params=code_data)
print(res_captcha.text)
dfp = "R0_Khr5gNf5pLQtbuTMr0Dfq75SM21U2PGxA3RjAWrKl3aJf0f-9gOocv_UNgSxNukbRy0hLjTETOwzFoJFNeEWly6vzn7Q0vIyImgDbDC9oiVKtIv08Pp2dnEJn6YJwmr6uQMK74Fu7i3XNC7e9mBgW_6XYRjuo"
session.cookies.set('RAIL_DEVICEID' , dfp)
login_data = {
'username': account,
'password': pwd,
'appid': 'otn',
'answer': code
}
res_login = session.post("https://kyfw.12306.cn/passport/web/login",headers=headers,data=login_data)
print(res_login.text)
python模拟12306购票_实现12306模拟登录--Python相关推荐
- python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析
Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...
- math python 向上取整_计算机等级考试二级Python语言模拟试卷单选解答详解第1期...
模拟试卷单选题20题 有粉丝私信希望增加一些针对国家二级Python考级的小练习和答题详解.所以就有了模拟试卷的题目讲解. 第1题:下面的程序运行结果是( ) 解答: 这是一个变量作用域的问题,变量分 ...
- 蒙特卡洛模拟预测股票_使用蒙特卡洛模拟来预测极端天气事件
蒙特卡洛模拟预测股票 In a previous article, I outlined the limitations of conventional time series models such ...
- 【Java+JSP+MySql】12306购票系统(四)登录注册
文章目录 登录 Servlet代码 html代码 注册 Servlet代码 html代码 登录 Servlet代码 Servlet代码所在文件夹位置如下截图所示 登陆的servlet代码文件命名为Lo ...
- python数据分析模块包括_数据开发必会 | Python数据分析模块
作为数据开发,Python强大的数据分析模块还是必须要会的,横向拓展数据分析与挖掘技术栈也是很有必要的.本文将对Pandas.NumPy.SciPy.Matplotlib等分析挖掘库的安装和使用进行简 ...
- 阿里云python自测答案_阿里云技能测试python初级中级高级
简介 偶尔发现,阿里云-开发者社区,里竟然有技能测试平台 覆盖知识面也较多 初级(65) 涉及知识点:Python语言的基本特性.编程环境.语法基础.数据结构,了解Python的网络编程与Web开发, ...
- 有没有可以刷python题的软件_你想要的Python面试都在这里了【315+道题】
第一部分 Python基础篇(80题) 1.为什么学习Python? 1.python是脚本语言,作为程序员至少应该掌握一本通用脚本语言,因为脚本语言与编译语言的开发测试过程不同,可以极大的提高编程效 ...
- python代码编写工具_编写更好的Python代码的终极指南
python代码编写工具 Despite its 尽管它 downsides, Python remains the king of today's programming world. Its ve ...
- python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
今天为大家带来的内容是:python高级编程之消息队列(Queue)与进程池(Pool),结合了实例的形式详细分析了Python消息队列与进程池的相关原理.使用技巧与操作注意事项!!! Queue消息 ...
- python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...
廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ...
最新文章
- HDU3434数学题
- 测试tcp连接数工具_后端开发程序员不知道压力测试怎么能行
- 2013年2月28日星期四
- leetcode57. 插入区间
- python 实现 CRC 冗余码的方法
- [转]2020年4月github上最热门项目-python
- c# async await异步方法
- django 搭建上传文件系统——细说Form Validation(二)
- 查看硬件配置信息 lshw
- 关于整车上下电流程和电源管理
- 【githubboy】一份开源的小型金融知识图谱构建流程,可帮助你更好的学习与理解知识图谱的使用
- android6.0系统车载航一,谷歌确定Android 6.0命名为Marshmallow
- 【毕业设计之PHP系列】PHP课程网站络管理系统
- SSM实现邮箱验证功能
- 第三次作业(蒋鑫和贺俊朋组)
- html页面长按保存图片,h5长按保存图片
- taobao.trades.sold.get-查询卖家已卖出的交易数据(根据创建时间),淘宝店铺卖出订单查询API接口,R2接口,oAuth2.0交易接口代码分享
- mysql 默认值批量更改_mysql 批量修改默认值
- 迅搜中文分词简明教程
- SSM ==> 超市管理系统(mysql)
热门文章
- 穷举字符串c语言,穷举密码算法
- python竖线_Matplotlib示例.43 横线与竖线
- shim是什么?Vue响应式原理
- 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
- win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker
- php 一次性动态口令,一次性口令 (OTP) 动态口令身份认证
- java对excel加密_随笔:Java 对Excel等文件进行加密、解密
- UWB相关技术之测距定位方法
- php cms 源码下载,PHPCMS v9.6.3 UTF8
- bat 命令如何启动远程PC上的一个程序?