网站首页 > 技术文章 正文
12036网站相信很多人都知道吧!每一到节假日的时候,特别是过年,那可是一票难求啊!手动刷票永远也比不过程序自动刷票!
所以今天给大家来个Python模拟登录的教程! 需要用的模块有 import requests , base64 , re 没有安装这些模块的同学可以先安装好! 安装方法一般可以用 cmd 命令 pip install 模块名称 回车开始安装!
准备工作都做好了之后 我们可以开始分析下12306的网站了! 比较难的地方就是处理验证码这快 我们都知道 12306网站的验证码非常奇葩 有时候刷新好几次才能分辨出来.
我们通过浏览器抓包分析得出验证码的地址 发现验证码图片其实都是base64编码 , 所以我们需要用到Python 的 base64模块来进行解码了.然后转为图片保存本地 好识别!
12306网站的验证码图片验证其实都是根据鼠标点击的图片坐标,所以我们需要用函数定义个坐标
还有要注意的就是 Session 与cookie的处理 这个都比较简单 因为requests 这个模块已经自带的有这个功能了!
剩下的都是比较简单了! 好了废话不多说 我们直接上代码吧!
# -*- coding:utf-8 -*- """12306登陆""" import requests import base64 import re def get_point(index): map = { '1': '37,46', '2': '110,46', '3': '181,46', '4': '253,46', '5': '37,116', '6': '110,116', '7': '181,116', '8': '253,116', } index = index.split(',') temp = [] for item in index: temp.append(map[item]) return ','.join(temp) # 实例化一个Session session = requests.Session() # 自动的处理cookie headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' } session.headers.update(headers) # 伪装成浏览器 # 1. 访问 获取cookie cookie_url = 'https://kyfw.12306.cn/otn/login/conf' response = session.get(cookie_url) # 2. 下载验证码 captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand&1541686714134&callback=jQuery19109992892609908492_1541686371355&_=1541686371356' response = session.get(captcha_url) data = response.text img_base64 = re.findall(r'"image":"(.*?)"', data)[0] # img_base64 = 'data:image/jpg;base64,' + img_base64 # 转换成二级制数据 img_bytes = base64.b64decode(img_base64) # 写到文件 with open('captcha.jpg', 'wb') as f: f.write(img_bytes) # 3校验验证码 check_captcha = 'https://kyfw.12306.cn/passport/captcha/captcha-check?callback=jQuery19109992892609908492_1541686371355&rand=sjrand&login_site=E&_=1541686371358' response = session.get(check_captcha, params={'answer': get_point( input('请输入正确的序号>>>:'))}) # 验证码输入,请输入正确验证码的序号(不是坐标),序号之间以,号隔开,验证码在程序目录下 res = response.text code = re.findall(r'"result_code":"(.*?)"', res)[0] if code == '4': print('验证码校验成功') # 4 校验用户名密码 login_url = 'https://kyfw.12306.cn/passport/web/login' form_data = { 'username': '12306账号', # 替换成自己的12306账号 'password': '12306密码', # 替换成自己的12306密码 'appid': 'otn' } response = session.post(login_url, data=form_data) res = response.json() if res["result_code"] == 0: print('用户名密码校验成功!') # 5获取权限token uamtk_url = 'https://kyfw.12306.cn/passport/web/auth/uamtk' response = session.post(uamtk_url, data={'appid': 'otn'}) res = response.json() if res["result_code"] == 0: print('获取token成功') # 6.校验 token check_token_url = 'https://kyfw.12306.cn/otn/uamauthclient' response = session.post(check_token_url, data={ 'tk': res['newapptk']}) print(response.text) 以上就是12306模拟登录的Python源代码! 注意 本代码并不支持抢票刷票功能,仅供学习参考!有能力的同学可以自行第二次开发哦!
猜你喜欢
- 2024-10-16 【验证码逆向专栏】百某网数字九宫格验证码逆向分析
- 2024-10-16 jquery-利用canvas让图片旋转角度
- 2024-10-16 一文带你搞懂JS实现压缩图片 js压缩上传图片
- 2024-10-16 前端性能优化之请求优化 前端性能优化问题
- 2024-10-16 Serverless 实战:如何为你的头像增加点装饰?
- 2024-10-16 谈谈图片上传及canvas压缩的流程 js 图片压缩后上传
- 2024-10-16 妹子委婉地和男友说没钱了,结果差点换来一张luo照?
- 2024-10-16 Blob-对象介绍 对象object
- 2024-10-16 《小白HTML5成长之路51》canvas压缩图片上传功能的原理
- 2024-10-16 Dom-to-image截图将html生成图片 html2canvas截图
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)