selenium如何識別條形驗證碼,自動輸入驗證碼

在自動化測試或網頁爬取中,識別驗證碼是常見的難點。Selenium 本身不具備直接識別驗證碼的能力,但可以通過結合第三方工具、OCR 技術或人工介入等方式解決。以下是多種可行方案的詳細實現思路及代碼示例:

一、方案一:使用第三方驗證碼識別服務(最推薦)

原理

通過 API 將驗證碼圖片發送給專業識別平臺,平臺返回識別結果,適用于復雜驗證碼(如扭曲文字、點選式等)。

常用平臺
  • 打碼平臺:超級鷹、云打碼、快識別等(需注冊賬號獲取 API 密鑰)。
  • AI 識別服務:Google Cloud Vision、百度 AI 開放平臺、騰訊云 OCR 等(適合企業級應用)。
代碼示例(以超級鷹為例)

python

運行

from selenium import webdriver
import requests
import base64
import time# 1. 初始化瀏覽器
driver = webdriver.Chrome()
driver.get("需要驗證碼的網頁URL")# 2. 截取驗證碼圖片
def get_captcha(driver, element_id):# 定位驗證碼元素并截圖captcha_element = driver.find_element_by_id(element_id)captcha_element.screenshot("captcha.png")return "captcha.png"# 3. 調用超級鷹API識別
def recognize_captcha(image_path, app_id, app_key, soft_id):# 讀取圖片并轉base64with open(image_path, "rb") as f:image_data = base64.b64encode(f.read())# 構造請求參數url = "http://api.chaojiying.com/Upload/Processing.php"data = {"user": app_id,"pass2": app_key,"softid": soft_id,"codetype": "1004",  # 驗證碼類型,1004代表數字+英文"file": image_data}# 發送請求response = requests.post(url, data=data)return response.json()["pic_str"]  # 返回識別結果# 4. 主流程
if __name__ == "__main__":# 超級鷹賬號信息(需自行注冊)APP_ID = "你的AppID"APP_KEY = "你的AppKey"SOFT_ID = "你的SoftID"# 截取驗證碼img_path = get_captcha(driver, "captcha_img")  # 假設驗證碼元素ID為captcha_img# 識別驗證碼captcha_text = recognize_captcha(img_path, APP_ID, APP_KEY, SOFT_ID)print("識別結果:", captcha_text)# 輸入驗證碼并提交driver.find_element_by_id("captcha_input").send_keys(captcha_text)driver.find_element_by_id("submit_btn").click()time.sleep(3)driver.quit()

二、方案二:使用 OCR 庫本地識別(適合簡單驗證碼)

原理

通過 Python 的 OCR 庫(如 Pillow、Tesseract)對圖片進行文字識別,適合無干擾的純文字驗證碼。如下面這個驗證碼:

實現步驟(1,2步驟可以參考文章selenium識別條形驗證碼,pytesseract下載、配置環境變量-CSDN博客)
  1. 安裝 Tesseract OCR 引擎(需下載本地安裝包)
  2. 安裝 Python 綁定庫pytesseract
  3. 截圖驗證碼并識別
代碼示例

python

運行

from selenium import webdriver
from PIL import Image
import pytesseract
import time# 1. 配置Tesseract路徑(Windows需修改此處)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"# 2. 初始化瀏覽器
driver = webdriver.Chrome()
driver.get("http://example.com/captcha_page")  # 替換為實際網址# 3. 截取驗證碼并識別
def recognize_captcha(driver, element_id):# 定位元素并截圖captcha_element = driver.find_element_by_id(element_id)captcha_element.screenshot("captcha.png")# 打開圖片并識別image = Image.open("captcha.png")# 可選:預處理圖片(灰度化、去噪點)image = image.convert("L")  # 灰度化captcha_text = pytesseract.image_to_string(image, lang="eng+chi_sim")return captcha_text.strip()  # 去除空格和換行# 4. 主流程
if __name__ == "__main__":# 假設驗證碼元素ID為captcha_imgcaptcha_text = recognize_captcha(driver, "captcha_img")print("識別結果:", captcha_text)# 輸入驗證碼driver.find_element_by_id("captcha_input").send_keys(captcha_text)driver.find_element_by_id("submit_btn").click()time.sleep(3)driver.quit()

三、方案三:人工介入(臨時解決方案)

適用場景
  • 開發測試階段,不想耗費時間集成識別服務
  • 驗證碼過于復雜(如滑動拼圖、點選圖標等)
代碼實現

python

運行

from selenium import webdriver
import timedriver = webdriver.Chrome()
driver.get("需要驗證碼的網頁")# 1. 截圖并提示人工輸入
driver.save_screenshot("page_with_captcha.png")
print("請查看截圖'page_with_captcha.png',并輸入驗證碼:")
captcha_text = input()  # 等待用戶手動輸入# 2. 提交驗證碼
driver.find_element_by_id("captcha_input").send_keys(captcha_text)
driver.find_element_by_id("submit_btn").click()time.sleep(3)
driver.quit()

四、方案四:規避驗證碼(進階技巧)

1.?使用 Cookie 繞過驗證
  • 原理:提前登錄并保存 Cookie,后續通過 Selenium 加載 Cookie 跳過驗證碼頁面
  • 代碼示例:

    python

    運行

    # 提前登錄并獲取Cookie(手動操作一次)
    driver.get("登錄頁")
    # 手動輸入賬號密碼和驗證碼,登錄成功后
    cookies = driver.get_cookies()
    # 保存Cookie到文件
    import json
    with open("cookies.json", "w") as f:json.dump(cookies, f)# 后續使用Cookie跳過驗證
    driver.get("目標頁")
    with open("cookies.json", "r") as f:cookies = json.load(f)
    for cookie in cookies:driver.add_cookie(cookie)
    driver.refresh()  # 刷新頁面即可免登錄
    
2.?模擬人類行為減少驗證觸發
  • 避免機械化操作(如設置隨機延遲、模擬鼠標移動軌跡)
  • 示例:

    python

    運行

    import random
    # 隨機延遲0.5-2秒
    time.sleep(random.uniform(0.5, 2))
    # 模擬鼠標移動(非直線點擊)
    from selenium.webdriver import ActionChains
    element = driver.find_element_by_id("button")
    actions = ActionChains(driver)
    actions.move_to_element_with_offset(element, random.randint(-10, 10), random.randint(-10, 10))
    actions.click().perform()
    

五、各方案對比與選擇建議

方案優點缺點適用場景
第三方識別服務準確率高,支持復雜驗證碼需付費,依賴網絡生產環境、商業項目
本地 OCR 識別免費,部署簡單,新人學習準確率低,需圖片預處理簡單文字驗證碼、測試環境
人工介入100% 準確,無需技術開發無法自動化,效率低臨時任務、開發調試
規避驗證碼高效,無需識別需提前登錄,適用性有限已知可繞過的固定場景

六、驗證碼識別優化技巧

  1. 圖片預處理
    • 灰度化、二值化處理(去除背景干擾)
    • 降噪點(使用 PIL 的filter(ImageFilter.MedianFilter)
  2. 指定識別語言
    • Tesseract 通過lang="eng"(英文)或lang="chi_sim"(簡體中文)提高準確率
  3. 結合機器學習
    • 若驗證碼樣式固定,可收集樣本訓練自定義 OCR 模型(如使用 TensorFlow 或 PyTorch)

通過以上方案,可根據驗證碼復雜度和項目需求選擇合適的識別方式。對于生產環境,優先考慮第三方服務(如超級鷹)或企業級 AI 接口(如百度 OCR),以保證穩定性和準確率;測試階段可先用人工介入或本地 OCR 快速驗證流程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84974.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84974.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84974.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SAP將指定EXCEL工作SHEET的數據上傳到內表

SAP將指定EXCEL工作SHEET的數據上傳到內表 本文描述了一個SAP ABAP類方法upload_excel_2internaltab,用于將Excel文件數據上傳到內部表。主要功能包括: 驗證Excel行列范圍有效性,若起始值大于結束值則拋出異常檢查文件是否存在,支…

Spring Boot(九十三):Springboot 整合cfx實現webservice接口

1 服務端 最近項目改造,有一些老項目接口協議是webservice soap1.1,這就需要我們提供webservice服務接口。在Spring Boot中整合CFX(CXF框架)以實現Web服務客戶端與服務端的功能,可以分為幾個步驟。下面我將詳細介紹如何在Spring Boot中設置一個Web服務端點,使用Apache CX…

Triton server的部署、構建、backend插件機制整體介紹

目錄 0 引言 1 什么是Trition inference server 2 Trition inference server部署 2.1 下載server 2.2 下載模型 2.3 實驗 3 triton inference server的構建 3.1 build時候需要哪些repo 3.2 構建過程做了什么 3.3 構建體驗 4 閱讀readme整體了解下backend機制 4.1 什…

Paimon在各大公司生產實踐和優化總結

這是一篇匯總和個人學習文章,主要目的是總結一下Paimon在各大公司的落地做一個學習筆記。 本文的主要內容是關于Paimon在各大公司包括Vivo、Shopee、阿里、抖音等公司的落地實踐,文末有文章來源地址,內容大概分為幾個部分: 1.引…

簡析自動駕駛產業鏈及其核心技術體系

一、自動駕駛產業鏈 自動駕駛產業鏈可以細分為感知層、決策層、執行層以及通信層等多個環節。上游部分主要包括提供環境感知所需的各種傳感器(如激光雷達、毫米波雷達、攝像頭等)、高精度地圖服務、定位系統以及其他相關硬件設備;中游涵蓋了…

第一節 布局與盒模型-Flex與Grid布局對比

一、核心特性對比?? 1. ??布局維度?? ??Flex 布局??: ??一維布局??:僅支持單方向(水平或垂直)的排列,通過 flex-direction 控制主軸方向(row 或 column)。??適用場景??&…

國產USRP X410 PRO/PRO+(相參版):寬頻段、大帶寬、多通道的4×4高性能軟件無線電設備

國產USRP X410 PRO/PRO(相參版)高性能軟件無線電,作為USRP X410的進階版本,X410 PRO/PRO核心均升級為Xilinx XCZU48DR FPGA芯片,顯著提升了信號處理能力。平臺延續了Xilinx Zynq UltraScale RFSoC的先進架構,集成四核ARM處理器及高…

Mac電腦-Office 2024 長期支持版(Excel、Word、PPT)

Office 2024 mac 是一款專為蘋果電腦用戶設計的高性能、高安全性的辦公軟件套裝 集成了Word、Excel、PowerPoint、Outlook等經典應用,為用戶提供了一站式的辦公解決方案。 不僅繼承了Office系列一貫的卓越性能,還在功能性和用戶體驗上進行了全面升級。…

vue2通過leaflet實現圖片點位回顯功能

需求:在圖片上標點了,需要根據標記點在圖片上進行回顯功能,并且不會根據窗口大小導致標記點移位 1.效果 2.下載插件 用到的是leaflet插件:一個交互式地圖 JavaScript 庫,我下載是 "leaflet": "^1.9.4&…

OmniDocBench:一鍵評測PDF解析算法

絕大多數文檔格式都能無損轉換至PDF,解決了PDF解析,也就相當于解決了絕大多數文檔的解析。所以,PDF解析算法是文檔服務的基石技術。 PDF解析算法目前有兩類技術路線 pipeline方法,整合layout analysis, OCR, formula/table reco…

[按鍵精靈安卓/ios腳本插件開發] 遍歷獲取LuaAuxLib函數庫命令輔助工具

LuaAuxLib庫 LuaAuxLib是按鍵精靈所有內置命令所在的庫文件,有多種方式來獲取LuaAuxLib庫下的函數命令,例如反編譯按鍵精靈手機端庫文件等。這里咱們來介紹一種淺顯易懂的方式來獲取,直接for循環遍歷獲取函數名。 ScanLuaAuxLib 我們寫一個自…

深度學習和計算機視覺的關系的理解

深度學習和計算機視覺的關系 深度學習作為人工智能的重要分支,近年來在計算機視覺領域取得了革命性突破。計算機視覺的核心任務包括圖像分類、目標檢測、語義分割等,而深度學習通過神經網絡模型自動學習圖像特征,極大提升了這些任務的準確率…

springboot開發項目 SLF4J+Logback日志框架集成【最終篇】

在這篇文章之前,實際對于 springboot和SLF4JLogback日志框架的使用 我已經分享過3篇關于springboot 日志的文章了。為什么會在寫這篇最終篇,因為 前3篇分享的關于springBoot框架日志的配置方案, 發現了一個問題:只有項目啟動的時候…

phpstudy無法啟動apache,80端口被占用,完美解決

phpstudy無法啟動apache,80端口被占用,完美解決 解決方法一(最推薦) 依次點擊網站-管理-修改 將端口由80改為81,再點擊確認后即可重新啟動apache。 需要注意的是,網站的訪問由127.0.0.1變為127.0.0.1:81。默認是80的端口所以可以不…

Loggers 配置解析(log4j.xml)

Loggers 配置解析 我們通過下面的例子來理解 log4j 的 Loggers 配置是如何決定日志輸出規則的。 <Loggers><!-- 根Logger&#xff1a;全局配置 --><Root level"debug"><AppenderRef ref"consoleAppender" level"info"/&g…

Java 大視界 -- Java 大數據在智能政務輿情監測與引導中的情感分析與話題挖掘技術(272)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

[NocoDB] 在局域網中調整Float類型顯示精度的部署經驗

在單位局域網環境中,NocoDB有效地連接MySQL數據庫和前端服務,做為中間件很方便。然而,在實際應用中,我們也會遇到一些較為隱藏的設置問題,比如此次經歷的 float 顯示精度不匹配問題。 問題環境 實際數據庫:MySQL,表中有 float 類型的數據 原始數據來源:Excel表格 數據轉…

Dockerfile 常見指令詳解

Dockerfile 是一個文本文件&#xff0c;包含了一系列用于構建 Docker 鏡像的指令。以下是 Dockerfile 中常見指令的詳細解釋&#xff1a; 基礎指令 1. FROM 指定基礎鏡像&#xff0c;必須為第一條指令&#xff08;注釋除外&#xff09;。 FROM ubuntu:20.04 FROM python:3.…

InnoDB Cluster 與 NDB Cluster 對比及部署指南

InnoDB Cluster 與 NDB Cluster 對比及部署指南 一、核心區別對比 特性InnoDB ClusterNDB Cluster存儲引擎InnoDBNDB (內存優先)架構設計基于Group Replication分布式架構(數據節點管理節點SQL節點)一致性模型最終一致性/強一致性強一致性數據持久化磁盤存儲為主內存存儲為主…

PySide環境配置及工具使用

文章目錄 [toc]1 概述1.1 PySide 能做什么&#xff1f;1.2 PySide 的優點1.3 PySide 的缺點1.4 示例代碼&#xff08;簡單窗口&#xff09; 2 環境準備2.1 安裝必要軟件2.2 修改 pip 源 3 PySide23.1 環境要求3.2 配置PySide23.3 工具配置 4 PySide64.1 環境4.2 配置PySide64.3…