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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

关于如何使用打码平台识别验证码

發布時間:2023/12/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于如何使用打码平台识别验证码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

準備工作

  • 安裝好selenium庫,使用的瀏覽器為Chrome
  • 這次使用的打碼平臺為超級鷹,提前準備好賬戶
  • 練習地址為:https://captcha3.scrape.center/
    • 提供者:崔慶才

獲取打碼平臺API

  • https://www.chaojiying.com/api-14.html
  • 如下所示
#!/usr/bin/env python # coding:utf-8import requests from hashlib import md5class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernameself.password = md5(password.encode('utf-8')).hexdigest()self.soft_id = soft_idself.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()

初始化

  • 首先導入必要的包,并初始化變量,代碼如下所示
import time from io import BytesIO from PIL import Image from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from chaojiying import Chaojiying_ClientUSERNAME = 'admin' # 登錄網站的賬戶 PASSWORD = 'admin' # 登錄網站的密碼 CHAOJIYING_USERNAME = 'username' # 超級鷹賬戶 CHAOJIYING_PASSWORD = 'password' # 超級鷹密碼 CHAOJIYING_SOFT_ID = 913617 # 超級鷹生成的軟件ID CHAOJIYING_KIND = 9004 # 驗證碼類型,可在官網查看class CrackCaptcha():def __init__(self):self.url = 'https://captcha3.scrape.center/'self.browser = webdriver.Chrome()self.wait = WebDriverWait(self.browser, 20)self.username = USERNAMEself.password = PASSWORDself.chaojiying = Chaojiying_Client(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)def __del__(self):"""gc機制關閉瀏覽器"""self.browser.close()

獲取驗證碼

def open(self):"""打開網頁輸入用戶名和密碼"""self.browser.get(self.url)# 填入用戶名密碼username = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type="text"]')))password = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type="password"]')))username.send_keys(self.username)time.sleep(2)password.send_keys(self.password)def get_captcha_button(self):"""獲取初始驗證按鈕"""button = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'button[type="button"]')))return buttondef get_captcha_element(self):"""獲取驗證圖片對象"""# 驗證圖片加載出來self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'img.geetest_item_img')))# 驗證碼完整節點element = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'geetest_widget')))return elementdef get_captcha_position(self):"""獲取驗證碼位置"""element = self.get_captcha_element()time.sleep(2)location = element.locationsize = element.sizetop, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size['width']return [top, bottom, left, right]def get_screenshot(self):"""獲取網頁截圖"""screenshot = self.browser.get_screenshot_as_png()screenshot = Image.open(BytesIO(screenshot))screenshot.save('screenshot.png')return screenshotdef get_captcha_image(self, name='captcha.png'):"""獲取驗證碼圖片"""top, bottom, left, right = self.get_captcha_position()print('驗證碼位置', top, bottom, left, right)screenshot = self.get_screenshot()captcha = screenshot.crop((left, top, right, bottom))captcha.save(name)return captcha

解析結果并提交

def get_points(self, captcha_result):"""解析識別結果"""groups = captcha_result.get('pic_str').split('|')locations = [[int(number) for number in group.split(',')] for group in groups]return locationsdef touch_click_words(self, locations):"""點擊驗證圖片"""for location in locations:ActionChains(self.browser).move_to_element_with_offset(self.get_captcha_element(), location[0], location[1]).click().perform()time.sleep(1)def get_verifi_button(self):"""確認按鈕"""submit = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.geetest_commit_tip')))submit.click()

運行

def crack_login(self):"""登錄"""self.open()time.sleep(1)button = self.get_captcha_button()button.click()image = self.get_captcha_image()bytes_array = BytesIO()image.save(bytes_array, format='PNG')# 調用超級鷹的PostPic方法將圖片發給后臺,發送的是字節流格式result = self.chaojiying.PostPic(bytes_array.getvalue(), CHAOJIYING_KIND)print(result) # 交給超級鷹處理的結果locations = self.get_points(result)self.touch_click_words(locations)time.sleep(3)self.get_verifi_button()time.sleep(5)success = self.wait.until(EC.text_to_be_present_in_element((By.TAG_NAME, 'h2'), '登錄成功'))if success:print('登錄成功')else:print('登錄失敗')if __name__ == '__main__':crack = CrackCaptcha()crack.crack_login()

結語

  • 這樣就完成了借助打碼平臺解決驗證碼的問題,借助打碼平臺幾乎任意的驗證碼都可以識別,是一種通用的方法。

總結

以上是生活随笔為你收集整理的关于如何使用打码平台识别验证码的全部內容,希望文章能夠幫你解決所遇到的問題。

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