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相关推荐

  1. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

  2. math python 向上取整_计算机等级考试二级Python语言模拟试卷单选解答详解第1期...

    模拟试卷单选题20题 有粉丝私信希望增加一些针对国家二级Python考级的小练习和答题详解.所以就有了模拟试卷的题目讲解. 第1题:下面的程序运行结果是( ) 解答: 这是一个变量作用域的问题,变量分 ...

  3. 蒙特卡洛模拟预测股票_使用蒙特卡洛模拟来预测极端天气事件

    蒙特卡洛模拟预测股票 In a previous article, I outlined the limitations of conventional time series models such ...

  4. 【Java+JSP+MySql】12306购票系统(四)登录注册

    文章目录 登录 Servlet代码 html代码 注册 Servlet代码 html代码 登录 Servlet代码 Servlet代码所在文件夹位置如下截图所示 登陆的servlet代码文件命名为Lo ...

  5. python数据分析模块包括_数据开发必会 | Python数据分析模块

    作为数据开发,Python强大的数据分析模块还是必须要会的,横向拓展数据分析与挖掘技术栈也是很有必要的.本文将对Pandas.NumPy.SciPy.Matplotlib等分析挖掘库的安装和使用进行简 ...

  6. 阿里云python自测答案_阿里云技能测试python初级中级高级

    简介 偶尔发现,阿里云-开发者社区,里竟然有技能测试平台 覆盖知识面也较多 初级(65) 涉及知识点:Python语言的基本特性.编程环境.语法基础.数据结构,了解Python的网络编程与Web开发, ...

  7. 有没有可以刷python题的软件_你想要的Python面试都在这里了【315+道题】

    第一部分 Python基础篇(80题) 1.为什么学习Python? 1.python是脚本语言,作为程序员至少应该掌握一本通用脚本语言,因为脚本语言与编译语言的开发测试过程不同,可以极大的提高编程效 ...

  8. python代码编写工具_编写更好的Python代码的终极指南

    python代码编写工具 Despite its 尽管它 downsides, Python remains the king of today's programming world. Its ve ...

  9. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)

    今天为大家带来的内容是:python高级编程之消息队列(Queue)与进程池(Pool),结合了实例的形式详细分析了Python消息队列与进程池的相关原理.使用技巧与操作注意事项!!! Queue消息 ...

  10. python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...

    廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ...

最新文章

  1. HDU3434数学题
  2. 测试tcp连接数工具_后端开发程序员不知道压力测试怎么能行
  3. 2013年2月28日星期四
  4. leetcode57. 插入区间
  5. python 实现 CRC 冗余码的方法
  6. [转]2020年4月github上最热门项目-python
  7. c# async await异步方法
  8. django 搭建上传文件系统——细说Form Validation(二)
  9. 查看硬件配置信息 lshw
  10. 关于整车上下电流程和电源管理
  11. 【githubboy】一份开源的小型金融知识图谱构建流程,可帮助你更好的学习与理解知识图谱的使用
  12. android6.0系统车载航一,谷歌确定Android 6.0命名为Marshmallow
  13. 【毕业设计之PHP系列】PHP课程网站络管理系统
  14. SSM实现邮箱验证功能
  15. 第三次作业(蒋鑫和贺俊朋组)
  16. html页面长按保存图片,h5长按保存图片
  17. taobao.trades.sold.get-查询卖家已卖出的交易数据(根据创建时间),淘宝店铺卖出订单查询API接口,R2接口,oAuth2.0交易接口代码分享
  18. mysql 默认值批量更改_mysql 批量修改默认值
  19. 迅搜中文分词简明教程
  20. SSM ==> 超市管理系统(mysql)

热门文章

  1. 穷举字符串c语言,穷举密码算法
  2. python竖线_Matplotlib示例.43 横线与竖线
  3. shim是什么?Vue响应式原理
  4. 【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码
  5. win10开发环境搭建之wsl2(Ubuntu)+Terminal+docker
  6. php 一次性动态口令,一次性口令 (OTP) 动态口令身份认证
  7. java对excel加密_随笔:Java 对Excel等文件进行加密、解密
  8. UWB相关技术之测距定位方法
  9. php cms 源码下载,PHPCMS v9.6.3 UTF8
  10. bat 命令如何启动远程PC上的一个程序?