模拟登录12306网站

首先用火狐浏览器进入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()

说明: 验证码是手动登录的,验证码的验证原理是通过正确图片点击的像素位置来确定,可以通过点击验证码图片来查看源码的变化来知道.

猜你喜欢

转载自blog.csdn.net/wzyaiwl/article/details/81511372