此内容仅供学习使用。。。杜绝XXX!!!
1.首先第一步
1.1进入12306的登录页面,并且打开开发者工具
在Netmork中找到验证图片的信息
1.2然后点击Headers后没有发现验证图片的URL.但是看见了base64加密
1.然后进行分析后发现上一个js存放的是图片的信息
1.4然后点开Headers可以获得Resquest URL
1.5然后就可以模拟登录获取到验证图片!!!注意!!!这里必须得进行base64的解密
#coding:utf-8
import requests
import re
import base64
#requests.Session这个类帮我们去实现cookie保持
session = requests.Session()
#第一步 获取登录页面 获取cookie
login_page_url ='https://kyfw.12306.cn/otn/resources/login.html'
session.get(login_page_url)
#第二部下载验证码图片
captcha_url = "https://kyfw.12306.cn/passport/captcha/captcha-image64"
#构造一个请求头
headers ={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36"
}
#构造请求表
params = {
"login_site": "E",
"module": "login",
"rand": "sjrand",
"1558755423568": "",
"callback": "jQuery1910666824847252552_1558755422272",
"_": "1558755422273",
}
#用session.get获取验证图片的页面
response = session.get(url=captcha_url, params=params, headers=headers).text
#这里用re.findall获取图片的数据
image_bs64 = re.findall('"image":"(.*?)",', response)[0]
#使用base64.b64decode解码
captcha_response = base64.b64decode(image_bs64)
#最后将获取的验证图存放起来
with open('captcha.jpg', 'wb') as f:
f.write(captcha_response)
**1.6校验验证码**
以下用图片表示操作过程
#第三步校验验证码
point = {
"1": "40,40",
"2": "120,40",
"3": "180,40",
"4": "250,40",
"5": "40,100",
"6": "120,100",
"7": "180,100",
"8": "250,100",
}
def get_point(nums):
nums = nums.split(',')
temp = []
for item in nums:
temp.append(point[item])
return ','.join(temp)
check_captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'
#构建请求参数
parameters = {
'callback': 'jQuery19105753135467783852_1558771124108',
'answer': get_point(input("请输入正确的图片顺序>>>")),
'rand': 'sjrand',
'login_site': 'E',
'_': '1558771124110',
}
check_response = session.get(check_captcha_url, params=parameters)
check_json = re.findall(r"\((.*?)\)", check_response.text)
check_json_str = check_json[0]
check_json_dict = json.loads(check_json_str)
check_res = check_json_dict
if check_res['result_code'] != '4':
exit('验证码校验失败!')
#第四步校验用户名和密码
login_url = 'https://kyfw.12306.cn/passport/web/login'
login_data = {
'username': '账号(你自己的)',
'password': '密码'(你自己的),
'appid': 'otn',
'answer': '134,46,254,40,191,44',
}
login_response = session.post(login_url, data=login_data)
print(login_response.text)
完整的就不发了,自己接上
仅供学习参考