首先用火狐浏览器进入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()
说明: 验证码是手动登录的,验证码的验证原理是通过正确图片点击的像素位置来确定,可以通过点击验证码图片来查看源码的变化来知道.