requests模拟登陆 验证码
生活随笔
收集整理的這篇文章主要介紹了
requests模拟登陆 验证码
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1.requests的高級(jí)應(yīng)用 ~ 會(huì)話維持
- 2.打碼平臺(tái)
- 3.云打碼平臺(tái)接口使用
- 4.隱藏參數(shù)與模擬登陸
1.requests的高級(jí)應(yīng)用 ~ 會(huì)話維持
# 利用Session對(duì)象發(fā)送get請(qǐng)求:from requests import Sessionsession = Session()res = session.get(url=url, headers=headers)# 利用Session對(duì)象發(fā)送post請(qǐng)求:from requests import Sessionsession = Session()data = {"username": "Jeremy","pwd": "123456"}res = session.get(url=url, data=data, headers=headers)模擬登陸快代理
from requests import Session # 1.實(shí)例化session對(duì)象 session = Session() url = "https://www.kuaidaili.com/login/" data = {... } # 2.發(fā)送post請(qǐng)求 res_login = session.post(...) # 3.訪問(wèn)跟人中心頁(yè)面 res_index = session.get(...) # 4.寫入文件看效果 with open('index.html', 'w', encoding="utf-8") as f:f.write(res_index.text)2.打碼平臺(tái)
#使用流程:
- 注冊(cè)賬號(hào):
普通賬戶: 充錢的
開(kāi)發(fā)賬戶: 調(diào)接口進(jìn)行打碼 - 登陸普通用戶: 查詢剩余積分, 在線充值
- 開(kāi)發(fā)者登陸:
我的軟件–>創(chuàng)建新軟件: 名字隨便, 秘鑰不要改—>軟件代碼 + 通訊秘鑰
開(kāi)發(fā)文檔:PythonHTTP操作示例
3.云打碼平臺(tái)接口使用
# 獲取驗(yàn)證碼: import http.client, mimetypes, urllib, json, time, requests######################################################################class YDMHttp:apiurl = 'http://api.yundama.com/api.php'username = ''password = ''appid = ''appkey = ''def __init__(self, username, password, appid, appkey):self.username = username self.password = passwordself.appid = str(appid)self.appkey = appkeydef request(self, fields, files=[]):response = self.post_url(self.apiurl, fields, files)response = json.loads(response)return responsedef balance(self):data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}response = self.request(data)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['balance']else:return -9001def login(self):data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey}response = self.request(data)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['uid']else:return -9001def upload(self, filename, codetype, timeout):data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}file = {'file': filename}response = self.request(data, file)if (response):if (response['ret'] and response['ret'] < 0):return response['ret']else:return response['cid']else:return -9001def result(self, cid):data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'cid': str(cid)}response = self.request(data)return response and response['text'] or ''def decode(self, filename, codetype, timeout):cid = self.upload(filename, codetype, timeout)if (cid > 0):for i in range(0, timeout):result = self.result(cid)if (result != ''):return cid, resultelse:time.sleep(1)return -3003, ''else:return cid, ''def report(self, cid):data = {'method': 'report', 'username': self.username, 'password': self.password, 'appid': self.appid, 'appkey': self.appkey, 'cid': str(cid), 'flag': '0'}response = self.request(data)if (response):return response['ret']else:return -9001def post_url(self, url, fields, files=[]):for key in files:files[key] = open(files[key], 'rb');res = requests.post(url, files=files, data=fields)return res.text#################只有一下部分需要作出修改, 上面的類不需要該########################## 用戶名 username = '用戶名'# 密碼 password = '密碼' # 軟件ID,開(kāi)發(fā)者分成必要參數(shù)。登錄開(kāi)發(fā)者后臺(tái)【我的軟件】獲得! appid = 軟件id # 創(chuàng)建軟件時(shí)生成的 # 軟件密鑰,開(kāi)發(fā)者分成必要參數(shù)。登錄開(kāi)發(fā)者后臺(tái)【我的軟件】獲得! appkey = '軟件秘鑰' # 創(chuàng)建軟件時(shí)生成的# 圖片文件 filename = '驗(yàn)證碼圖片的路徑' # 驗(yàn)證碼類型,# 例:1004表示4位字母數(shù)字,不同類型收費(fèi)不同。請(qǐng)準(zhǔn)確填寫,否則影響識(shí)別率。在此查詢所有類型 http://www.yundama.com/price.html codetype = 驗(yàn)證碼類型# 超時(shí)時(shí)間,秒 timeout = 60 # 檢查 if (username == 'username'):print('請(qǐng)?jiān)O(shè)置好相關(guān)參數(shù)再測(cè)試') else:# 初始化yundama = YDMHttp(username, password, appid, appkey)# 登陸云打碼uid = yundama.login();print('uid: %s' % uid)# 查詢余額balance = yundama.balance();print('balance: %s' % balance)# 開(kāi)始識(shí)別,圖片路徑,驗(yàn)證碼類型ID,超時(shí)時(shí)間(秒),識(shí)別結(jié)果cid, result = yundama.decode(filename, codetype, timeout);# 注意:(result就是識(shí)別的結(jié)果)4.隱藏參數(shù)與模擬登陸
# 古詩(shī)文網(wǎng)模擬登陸 import requests from requests import Session from bs4 import BeautifulSoupsession = Session() headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36' } # 1.我們?yōu)榱双@取隱藏的參數(shù), get一次登錄界面, 從登錄界面中提取出隱藏的參數(shù), 下載驗(yàn)證碼的圖片 url_get = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx' res = session.get(url=url_get, headers=headers) soup = BeautifulSoup(res.text, 'lxml') # 獲取隱藏參數(shù)# 下載驗(yàn)證碼圖片# 2.云打碼平臺(tái)打碼 import http.client, mimetypes, urllib, json, time, requests ###################################################################### # 調(diào)用接口 class YDMHttp:pass ########################### 需要用戶自己編寫 ########################## # 用戶名 # 普通用戶的用戶名和密碼 username = '...' # 密碼 password = '...' # 軟件ID,開(kāi)發(fā)者分成必要參數(shù)。登錄開(kāi)發(fā)者后臺(tái)【我的軟件】獲得! appid = 8796 # 軟件密鑰,開(kāi)發(fā)者分成必要參數(shù)。登錄開(kāi)發(fā)者后臺(tái)【我的軟件】獲得! appkey = 'bc5770c166e86900c6e9b04efc159229' # 圖片文件 filename = 'code.jpg' # 驗(yàn)證碼類型,# 例:1004表示4位字母數(shù)字,不同類型收費(fèi)不同。請(qǐng)準(zhǔn)確填寫,否則影響識(shí)別率。在此查詢所有類型 http://www.yundama.com/price.html codetype = 1004 # 超時(shí)時(shí)間,秒 timeout = 60 # 檢查 if (username == 'username'):print('請(qǐng)?jiān)O(shè)置好相關(guān)參數(shù)再測(cè)試') else:# 初始化yundama = YDMHttp(username, password, appid, appkey)# 登陸云打碼uid = yundama.login();print('uid: %s' % uid)# 查詢余額balance = yundama.balance();print('balance: %s' % balance)# 開(kāi)始識(shí)別,圖片路徑,驗(yàn)證碼類型ID,超時(shí)時(shí)間(秒),識(shí)別結(jié)果cid, result = yundama.decode(filename, codetype, timeout);print('cid: %s, result: %s' % (cid, result))####################################################################### 確定post請(qǐng)求的url, 構(gòu)建登錄需要的數(shù)據(jù) url_post = '...' data = {... } res = session.post(url=url_post, headers=headers, data=data) with open('login.html', 'w', encoding='utf-8') as f:f.write(res.text)總結(jié)
以上是生活随笔為你收集整理的requests模拟登陆 验证码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Selenium 与 PhantomJS
- 下一篇: MongoDB数据库的下载与Python