91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python+Selenium如何解決圖片驗證碼登錄或注冊問題

發布時間:2021-08-03 11:11:13 來源:億速云 閱讀:129 作者:小新 欄目:開發技術

小編給大家分享一下Python+Selenium如何解決圖片驗證碼登錄或注冊問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1. 解決思路

首先要獲得這張驗證碼的圖片,但是該圖片一般都是用的js寫的,不能夠通過url進行下載。
解決方案:截圖然后根據該圖片的定位和長高,使用工具進行裁剪
裁剪完畢之后,使用工具解析該圖片。

2. 代碼實現

2.1 裁剪出驗證碼圖片

裁剪圖片需要使用 Pillow 庫,進入pip包路徑后輸入安裝命令pip install Pillow:
之前安裝的時候忘記了截圖,只能夠截一張安裝后的圖片了 ╰(:з╰∠)_

安裝完成后,代碼實現方式如下:

#coding=utf-8
from selenium import webdriver
import time
from PIL import Image
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
# 進入該網站
driver.get("http://www2.nmec.org.cn/wangbao/nme/sp/root/account/signup.html")
# 能否在5s內找到驗證碼元素,能才繼續
if WebDriverWait(driver,5).until(lambda the_driver:the_driver.find_element_by_id("CaptchaImg"), "查找不到該元素"):
 # 對于一次截屏無法到截到驗證碼的情況,需要滾動一段距離,然后驗證碼的y坐標也應該減去這段距離
 scroll = 500
 js = "document.documentElement.scrollTop='%s'" %scroll
 driver.execute_script(js)
 # 截下該網站的圖片
 driver.get_screenshot_as_file("E:/Python_selenium_advance/Picture/full.png")
 # 獲得這個圖片元素
 img_ele = driver.find_element_by_id("CaptchaImg")
 # 得到該元素左上角的 x,y 坐標和右下角的 x,y 坐標
 left = img_ele.location.get('x')
 upper = img_ele.location.get('y') - 500
 right = left + img_ele.size.get('width')
 lower = upper + img_ele.size.get('height')
 # 打開之前的截圖
 img = Image.open("E:/Python_selenium_advance/Picture/full.png")
 # 對截圖進行裁剪,裁剪的范圍為之前驗證的左上角至右下角范圍
 new_img = img.crop((left, upper, right, lower))
 # 裁剪完成之后保存到指定路徑
 new_img.save("E:/Python_selenium_advance/Picture/croped.png")
 
 time.sleep(2)
 driver.quit()
else:
 print("找不到驗證碼元素")

2.2 使用 圖鑒 商用接口來識別驗證碼

接口介紹網址:http://www.ttshitu.com/docs/python.html#pageTitle

調用該接口直接使用網頁上的接口文檔就行,代碼如下:

import json
import requests
import base64
from io import BytesIO
from PIL import Image
from sys import version_info

def base64_api(uname, pwd, softid, img):
 img = img.convert('RGB')
 buffered = BytesIO()
 img.save(buffered, format="JPEG")
 if version_info.major >= 3:
  b64 = str(base64.b64encode(buffered.getvalue()), encoding='utf-8')
 else:
  b64 = str(base64.b64encode(buffered.getvalue()))
 data = {"username": uname, "password": pwd, "softid": softid, "image": b64}
 result = json.loads(requests.post("http://api.ttshitu.com/base64", json=data).text)
 if result['success']:
  return result["data"]["result"]
 else:
  return result["message"]
 return ""

將其保存為一個單獨的 analysis_captcha.py ,然后再導入該方法,直接使用即可:

from analysis_captcha import base64_api

def analysis_captcha(filename):
 '''
 使用 圖鑒 商用接口來識別指定位置的驗證碼圖片
 :param filename: 驗證碼圖片位置
 :return : 驗證碼文本
 '''
 img_path = filename
 img = Image.open(img_path)
 result = base64_api(uname='kaibin', pwd='******', softid='4545454', img=img)
 return result

驗證碼識別可能會出錯,到時候再點擊驗證碼圖片換一張,然后重來即可。

以上是“Python+Selenium如何解決圖片驗證碼登錄或注冊問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安达市| 大邑县| 锦州市| 望奎县| 加查县| 聂拉木县| 蒙自县| 彭阳县| 五华县| 远安县| 长丰县| 临江市| 聂拉木县| 泗洪县| 安岳县| 河津市| 怀化市| 石柱| 淮北市| 沂源县| 竹山县| 高雄县| 大同市| 阿城市| 兰西县| 太仆寺旗| 崇明县| 兴化市| 岢岚县| 鄂温| 台前县| 连平县| 鞍山市| 富川| 即墨市| 泽州县| 沐川县| 如东县| 台山市| 沽源县| 八宿县|