日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 12306登录_实现12306模拟登录--Python

發(fā)布時間:2023/12/20 python 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 12306登录_实现12306模拟登录--Python 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、首先要找出登錄接口和圖片生成、驗證接口。

輸入錯誤帳號密碼、驗證碼,點擊登錄后會發(fā)生兩個請求:

2、接下來研究如何驗證驗證碼的

接著剛才操作,再次選擇驗證碼某個圖片點擊登錄,對比了一下剛才的驗證鏈接,有個關(guān)鍵參數(shù)(answer)不同(如下圖),通過多次請求發(fā)現(xiàn)answer參數(shù)其實是 坐標(biāo)

多次嘗試就知道每張圖大概坐標(biāo)(也可以通過QQ、微信截圖來驗證),如下圖

接下來就驗證一下是否正確:首先把圖片下載下來,(人工)識別選擇對應(yīng)圖片,輸入坐標(biāo)傳參進行請求

import requests,base64

session = requests.session()

res_image = session.get('https://kyfw.12306.cn/passport/captcha/captcha-image64').json()

with open('code.jpg','wb') as f:

f.write(base64.b64decode(res_image["image"]))

code = input("坐標(biāo):")

code_data = {

'answer': code,

'rand': 'sjrand',

'login_site': 'E'

}

res_captcha = session.get('https://kyfw.12306.cn/passport/captcha/captcha-check',params=code_data)

print(res_captcha.text)

3、驗證成功了就成功了一半,接下來請求登錄。

在頁面上選中正確的圖片(驗證碼不通過不會觸發(fā)login請求)后點擊登錄,抓取https://kyfw.12306.cn/passport/web/login 請求鏈接,查看攜帶什么參數(shù)請求,如下圖

發(fā)現(xiàn)除了攜帶用戶、密碼外,還有固定參數(shù)appid,驗證碼坐標(biāo)answer。

那來驗證一下是否返回如圖上信息:

login_data = {

'username': account,

'password': pwd,

'appid': 'otn',

'answer': code

}

res_login = session.post("https://kyfw.12306.cn/passport/web/login",data=login_data)

print(res_login.text)

結(jié)果返回了error html頁面。(可能在某地方做了反爬)

于是加了headers:host、origin、referer、UA,還是不行.......

后來發(fā)現(xiàn)login鏈接有一大串cookie參數(shù)

再次點擊登陸,查看兩次的cookie變化,發(fā)現(xiàn)只有 RAIL_DEVICEID 的值沒有變化,其它都是動態(tài)變的。那問題來了,這些cookie是如何得來的?

但是還沒找到 RAIL_DEVICEID 的值,結(jié)果發(fā)現(xiàn)請求鏈接是隱藏在js文件里。

暫時無法獲取,先手動配置RAIL_DEVICEID(將頁面的復(fù)制下來),就可以登錄成功(如下圖)。

代碼整理如下:

import requests

import base64

import time

import json

# from account import account,pwd

account='asdasd'

pwd='234234'

headers={

"Host": "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/72.0.3626.64 Safari/537.36",

}

def create_code():

codes = input("輸入圖片位置:")

coordinate = {

"1": "50,50",

"2": "110,50",

"3": "180,50",

"4": "240,50",

"5": "50,110",

"6": "110,110",

"7": "180,110",

"8": "240,110",

}

return ",".join([coordinate[i] for i in codes.split(" ")])

session=requests.Session()

session.get("https://kyfw.12306.cn/",headers=headers)

image_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64?login_site=E&module=login&rand=sjrand'

res_image = session.get(image_url,headers = headers)

with open('code.jpg','wb') as f:

f.write(base64.b64decode(res_image.json()["image"]))

captcha_url='https://kyfw.12306.cn/passport/captcha/captcha-check'

code = create_code()

code_data = {

'answer': code,

'rand': 'sjrand',

'login_site': 'E'

}

res_captcha = session.get(captcha_url,headers = headers,params=code_data)

print(res_captcha.text)

dfp = "R0_Khr5gNf5pLQtbuTMr0Dfq75SM21U2PGxA3RjAWrKl3aJf0f-9gOocv_UNgSxNukbRy0hLjTETOwzFoJFNeEWly6vzn7Q0vIyImgDbDC9oiVKtIv08Pp2dnEJn6YJwmr6uQMK74Fu7i3XNC7e9mBgW_6XYRjuo"

session.cookies.set('RAIL_DEVICEID' , dfp)

login_data = {

'username': account,

'password': pwd,

'appid': 'otn',

'answer': code

}

res_login = session.post("https://kyfw.12306.cn/passport/web/login",headers=headers,data=login_data)

print(res_login.text)

總結(jié)

以上是生活随笔為你收集整理的python 12306登录_实现12306模拟登录--Python的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。