计算机系统应用教程网站

网站首页 > 技术文章 正文

Python来模拟12306网站登录 附源代码

btikc 2024-10-16 08:18:37 技术文章 7 ℃ 0 评论

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源代码! 注意 本代码并不支持抢票刷票功能,仅供学习参考!有能力的同学可以自行第二次开发哦!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表