python爬蟲學習(7)
阿新 • • 發佈:2021-02-08
技術標籤:python爬蟲學習python
python爬蟲學習(待完成)
記錄時間:2021年2月7日
學習視訊觀看地址:https://www.bilibili.com/video/BV1Yh411o7Sz?p=55
需求1:12306模擬登入
在這個操作時,我們需要識別類似於這樣的驗證碼:
,需要使用第三方平臺進行識別(例如:超級鷹)。
超級鷹介面部分的程式碼簡單測試:
import requests from hashlib import md5 class Chaojiying_Client(object): def __init__(self, username, password, soft_id): self.username = username password = password.encode('utf8') self.password = md5(password).hexdigest() self.soft_id = soft_id self.base_params = { 'user': self.username, 'pass2': self.password, 'softid': self.soft_id, } self.headers = { 'Connection': 'Keep-Alive', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)', } def PostPic(self, im, codetype): """ im: 圖片位元組 codetype: 題目型別 參考 http://www.chaojiying.com/price.html """ params = { 'codetype': codetype, } params.update(self.base_params) files = {'userfile': ('ccc.jpg', im)} r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers) return r.json() def ReportError(self, im_id): """ im_id:報錯題目的圖片ID """ params = { 'id': im_id, } params.update(self.base_params) r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers) return r.json() if __name__ == '__main__': chaojiying = Chaojiying_Client('xxxxxxxx', 'xxxxxxxx', 'xxxxx') # 使用者名稱 密碼 軟體ID im = open('b.jpg', 'rb').read() # 本地圖片檔案路徑 print(chaojiying.PostPic(im, 9004)['pic_str']) # 驗證碼型別
另外,由於再次請求驗證碼會導致驗證碼重新整理,所以要採取截圖的方式獲取驗證碼圖片
先寫一半,後面的還沒測試出來,搞懂了再補充
from selenium import webdriver from PIL import Image import time from 超級鷹介面.chaojiying import Chaojiying_Client if __name__ == '__main__': edge = webdriver.Edge('./msedgedriver.exe') edge.maximize_window() edge.get('https://kyfw.12306.cn/otn/resources/login.html') time.sleep(2) switch_btn = edge.find_element_by_xpath('/html/body/div[2]/div[2]/ul/li[2]/a') switch_btn.click() # 獲取驗證碼圖片,使用截圖 time.sleep(2) edge.save_screenshot('./12306模擬登入/1.png') imgCode = edge.find_element_by_xpath('//*[@id="J-loginImg"]') location = imgCode.location size = imgCode.size rangle = ( int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height']) ) i = Image.open('./12306模擬登入/1.png') imgCode_path = './12306模擬登入/imgCode.png' frame = i.crop(rangle) frame.save(imgCode_path) # 提交驗證碼識別出座標 chaojiying = Chaojiying_Client('xxxxxxxx', 'xxxxxxxx', 'xxxxx') # 使用者名稱 密碼 軟體ID im = open('./12306模擬登入/imgCode.png', 'rb').read() # 本地圖片檔案路徑 result = chaojiying.PostPic(im, 9004)['pic_str'] # 驗證碼型別