关于如何使用打码平台识别验证码
生活随笔
收集整理的這篇文章主要介紹了
关于如何使用打码平台识别验证码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
準備工作
- 安裝好selenium庫,使用的瀏覽器為Chrome
- 這次使用的打碼平臺為超級鷹,提前準備好賬戶
- 練習地址為:https://captcha3.scrape.center/
- 提供者:崔慶才
獲取打碼平臺API
- https://www.chaojiying.com/api-14.html
- 如下所示
初始化
- 首先導入必要的包,并初始化變量,代碼如下所示
獲取驗證碼
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()結語
- 這樣就完成了借助打碼平臺解決驗證碼的問題,借助打碼平臺幾乎任意的驗證碼都可以識別,是一種通用的方法。
總結
以上是生活随笔為你收集整理的关于如何使用打码平台识别验证码的全部內容,希望文章能夠幫你解決所遇到的問題。