园田海参 发表于 2018-12-13 20:44:21

python登录12306一直无法验证

登录12306,一直验证码错误
12306改版之后获取验证码图片的URL后面几段参数有一个一直增加,剩下几个找不到规律啊
有没有大神告知一下我这代码应该怎么改才能登录上 或者告知一下有没有什么错误的地方,代码如下:


import requests


# 获取验证码图片
def get_captcha():
    session = requests.Session()
    captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand&1544615751202&callback=jQuery1910743787401637102_1544615373331&_=1544615373338'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'}
    resp = session.get(captcha_url,headers = headers).text
    resp = eval(resp)
    image = str(resp['image'])
    img = base64.b64decode(image)
    f = open('image.jpg','wb')
    f.write(img)
    f.close

# 验证图片
def check_captcha():
    answer_img = []
    answer = ''
    site = {'1':'30,45',
            '2':'110,43',
            '3':'185,47',
            '4':'250,48',
            '5':'35,120',
            "6":'100,117',
            '7':'190,121',
            '8':'246,122'}
    choice = input('请输入验证图片序号,(例如“15”或“347”等):')
    choice = list(choice)
    for each in choice:
      answer_img.append(site)
    for each in answer_img:
      answer += str(each) + ', '
    answer = answer[:-1]
    return str(answer)

# 登录12306

def login():
    login_url = 'https://kyfw.12306.cn/passport/web/login'
    username = input('请输入你的用户名:')
    password = input('请输入你的密码:')
    get_captcha()
    session = requests.Session()
    data = {'username':username,
            'password':password,
            'appid':'otn',
            'answer':check_captcha()}
    headers = {'Host':'kyfw.12306.cn',
               'Origin':'https://kyfw.12306.cn',
               'Referer':'https://kyfw.12306.cn/otn/resources/login.html',
               'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36'}
    resp = session.post(login_url,headers=headers,data=data)
    print(resp.text)


login()

幽梦三影 发表于 2018-12-13 21:21:02

import json
import requests

requests = requests.session()
img_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.3993011940822455'
headers = {'User_Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0'}
rep = requests.get(img_url,headers=headers)
with open('12306.jpg','wb') as f:
    f.write(rep.content)

url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'
x_y = input()
data = {
    'answer':x_y,
    'login_site':'E',
    'rand':'sjrand'
}
html = requests.post(url, data=data).text
print(json.loads(html))

园田海参 发表于 2018-12-13 21:42:08

幽梦三影 发表于 2018-12-13 21:21


这个是以前的验证码网址,11月有一次改版后改版后好像不一样了

幽梦三影 发表于 2018-12-13 21:49:38

园田海参 发表于 2018-12-13 21:42
这个是以前的验证码网址,11月有一次改版后改版后好像不一样了

还真不行了,我再研究一下

园田海参 发表于 2018-12-13 22:22:53

幽梦三影 发表于 2018-12-13 21:49
还真不行了,我再研究一下

12306获取验证码的网站变了 十一月改版了一次 而且登录的form data和以前不一样 好像是验证码和登录信息一起验证的
页: [1]
查看完整版本: python登录12306一直无法验证