首先用火狐浏览器进入12306网站的登录界面,F12获取登录界面的url地址.
再获取验证码图片的链接及其验证码校正所post的数据
最后获取用户名和密码的登录链接及其post的数据
# coding=utf-8
import requests
import os
#下载验证码图片
def save_image():
image_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.7519806101835129'
response = session.get(image_url)
if not os.path.exists('image'):
os.mkdir('image')
file_path = 'image/1.jpg'
with open(file_path,'wb') as f:
f.write(response.content)
#校正验证码
def check_captcha():
check_captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'
data = {
'answer':get_answer(input("请输入正确验证码的序号>>>:")),#正确图片的像素
'login_site':'E',
'rand':'sjrand'
}
response = session.post(check_captcha_url,data=data)
print (response.text)
#手动输入验证码序号
def get_answer(index):
point = {
'1': '37,46',
'2': '111,46',
'3': '181,46',
'4': '254,46',
'5': '37,116',
'6': '111,116',
'7': '181,116',
'8': '254,116'
}
index = index.split(',')
temp =[]
for item in index:
temp.append(point[item])
return ','.join(temp);
#校验用户名和密码
def check_username_paasword():
save_image()
check_captcha()
check_username_password_url = 'https://kyfw.12306.cn/passport/web/login'
data = {
'appid':'otn',
'password':'123456789',#帐号密码故意写错
'username':'123456789'
}
response = session.post(check_username_password_url,data=data)
print (response.text)
session = requests.Session() #创建一个session对象,实现自动会话处理
login_url = 'https://kyfw.12306.cn/otn/login/init' #登录页面,获取cookie
session.get(login_url)
check_username_paasword()
说明: 验证码是手动登录的,验证码的验证原理是通过正确图片点击的像素位置来确定,可以通过点击验证码图片来查看源码的变化来知道.