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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模拟12306登录

發布時間:2023/12/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模拟12306登录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模擬12306登錄思路

1.獲取驗證碼url保存到本地,在尋找時遇到了一些困難,因為之前網頁上圖片都是http://www.xxx.png這類格式的,直接常規操作就ok了,開始以為這樣所以就一直研究紅色箭頭的部分,還是沒有突破。然后放棄再找,點開黃色箭頭是生成驗證碼的url,不過驗證碼是以base64編碼的,終于找到了。接下來可以用base64.b64decode()轉化成二進制保存圖片。驗證碼獲取到此為止。好像再早一些可以直接獲取驗證碼的url。。。

?

2.驗證,這就比較簡單了,直接傳參就ok。

3.模擬登錄,傳參POST請求就ok了。

4.最終的效果圖。

PS:這里的圖片位置是從八張圖片的第一張左上角開始計算的,這里不太方便,需要通過截圖工具測量手動填入,并且要注意逗號是英文的!不要填錯!還有在請求時各種參數請詳見代碼注釋。

?5.code已優化用戶輸入

import requests import base64 import json import re from PIL import Image s = requests.Session()#創建一個s對象,實現自動會話處理 pic_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image64'#生成驗證碼的url check_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'#檢查驗證碼的url login_url = 'https://kyfw.12306.cn/passport/web/login'#登陸的url headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6824.400 QQBrowser/10.3.3127.400' } params = {'login_site':'E','module':'login','rand':'sjrand','1548225897803':'','callback':'jQuery191022828784922393353_1548223378930',#每次都是定值,但是如果兩次是關閉網頁重新打開是不一樣的,'_':'1548223378936'#似乎與時間有關系,時間戳 }#測試之后發現只保留callback參數就可以 response = s.get(pic_url,params = params,headers = headers) html = response.text jsondata = re.findall('\/\*\*\/.*?\((.*?)\).*?',html)[0]#注意轉義\* \( \) dic = json.loads(jsondata) img = base64.b64decode(dic['image']) with open('pic.jpg','wb') as f:f.write(img) img = Image.open('pic.jpg') img.show()nums = input('請輸入正確的圖片編號1~8,示例("1,2")') params = {'callback':'jQuery191022828784922393353_1548223378930','rand':'sjrand','login_site':'E','_':'1548223378941'#兩次請求此參數無關緊要 }pic_position = {'1': '40,40','2': '110,40','3': '180,40','4': '260,40','5': '40,120','6': '110,120','7': '180,120','8': '260,120' } num_list = nums.split(',') new_list = [pic_position[i] for i in num_list] answer = ','.join(new_list)#轉字符串params['answer'] = answer verify_result = s.get(url = check_url,params = params,headers = headers).text print(verify_result)username = input('請輸入用戶名') password = input('請輸入密碼') data = {'username':username,'password':password,'appid':'otn','answer':answer } login_result = s.post(url = login_url,data = data,headers = headers).text print(login_result)

PS:彈出exe框后將其關閉然后在進行輸入。?

總結

以上是生活随笔為你收集整理的模拟12306登录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。