Python 通過Playwright+OpenCV破解滑動驗證碼 實例

由于公司最近需要對接某業務系統,涉及到部分數據需要提交至其它平臺業務系統,只有其它平臺賬戶,沒有接口,因此做此開發。首先通過OpenCV計算出驗證驗證碼滑塊距離,根據距離,使用 Playwright 利用滑動距離模擬登錄

 下面展示Python  通過 Playwright 滑動及登錄過程
  1. 首先下載 安裝 Playwright
pip install playwright
  1. 安裝瀏覽器驅動(此步驟會在本地安裝二進制瀏覽器:火狐、谷歌等)
	python -m playwright install
  1. Playwright 錄制腳本(通過腳本錄制,不需要寫代碼,通過鼠標事件將代碼輸出到文件當中)
python -m playwright codegen -o "D:test.py"
  1. 主要代碼展示
import re
from playwright.sync_api import Playwright, sync_playwright
import time
import random
from result  import error_result, success_result
from position import get_gap_positiondef perform_slide(page, max_retries=3):"""執行滑塊驗證,支持自動重試"""retry_count = 0while retry_count < max_retries:try:page.wait_for_selector("#circle", state="visible", timeout=2000)page.wait_for_selector("#bg_canvas", state="visible", timeout=2000)# 計算缺口位置try:image_data = page.evaluate("document.getElementById('bg_canvas').toDataURL('image/png').split(',')[1]")gap_x = get_gap_position(image_data)except Exception as e:print(f"缺口檢測失敗,使用默認偏移量: {e}")gap_x = 50  # 備用值# 模擬拖動slider = page.query_selector("#circle")slider_bbox = slider.bounding_box()start_x = slider_bbox["x"] + slider_bbox["width"] / 2start_y = slider_bbox["y"] + slider_bbox["height"] / 2target_x = start_x + gap_x + 8page.mouse.move(start_x, start_y)page.mouse.down()steps = random.randint(15, 30)for i in range(steps):x = start_x + (target_x - start_x) * (i / steps)y = start_y + random.uniform(-2, 2)page.mouse.move(x, y)#time.sleep(random.uniform(0.01, 0.02))page.mouse.up()# 檢查成功if page.query_selector(".popup-success"):print("驗證成功!")return Trueelse:retry_count += 1print(f"驗證失敗,第 {retry_count} 次重試...")time.sleep(0.5)except Exception as e:print(f"滑動過程中出錯: {e}")retry_count += 1return Falsedef login_with_slide(username: str,password: str,login_url: str = "http://test.com/",max_slide_retries: int = 3
) -> dict:"""執行帶滑塊驗證的登錄,并返回登錄接口的 JSON 數據"""with sync_playwright() as playwright:browser = playwright.webkit.launch(headless=True)context = browser.new_context()page = context.new_page()page.set_default_timeout(5000)login_response = Nonedef handle_response(response):nonlocal login_responseif "login2" in response.url and response.status == 200:try:print("登錄接口響應:", response.json())login_response = login_result(response.json())except ValueError:return error_result("接口返回非json數據")page.on("response", handle_response)try:page.goto(login_url)page.get_by_role("textbox", name="請輸入統一社會信用代碼或身份證號").fill(username)page.get_by_role("textbox", name="請輸入密碼").fill(password)page.get_by_role("button", name="登錄").click()if not perform_slide(page, max_slide_retries):return error_result("滑塊驗證失敗")# 等待登錄接口響應page.wait_for_timeout(500)  # 簡單延遲,確保響應已捕獲return login_response or  error_result("未獲取到登錄異常")except Exception as e:return  error_result("f登錄異常: {}"+str(e))finally:page.close()context.close()browser.close()def login_result(response: dict) -> dict:if response.get("result")==0:return success_result("成功",response.get("data",{}).get("userDetail"))return error_result("登錄失敗,接口信息異常")
if __name__ == "__main__":result = login_with_slide(username="admin",password="hpg123789")print("最終結果:", result)

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

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

相關文章

山東省天地圖API申請并加載到QGIS和ArcGIS Pro中

目的&#xff1a;在QGIS/ArcGIS Pro中加載山東省不同時期的歷史影像1、申請API 山東省天地圖的API和國家天地圖的API不通用&#xff0c;需要單獨申請。 https://shandong.tianditu.gov.cn/ 打開本地服務資源找到影像的詳情頁 點擊申請地址按照下面的步驟一步一步來&#xff0c;…

qt窗口--02

文章目錄qt窗口--02QMessageBoxQColorDialogQFileDialogQFontDialogQInputDialog、結語很高興和大家見面&#xff0c;給生活加點impetus&#xff01;&#xff01;開啟今天的編程之路&#xff01;&#xff01; 作者&#xff1a;?( ‘ω’ )?260 我的專欄&#xff1a;qt&#…

Linux seLinux

Linux seLinux 1、什么是selinux&#xff0c;security enhanced linux–安全加強的linux。 是由美國國家安全局開發的以及歷史。selinux之前是基于自主存取控制方法DAC&#xff0c; 只要符合權限即可&#xff0c;通過suid和sgid特殊權限存在有一定的安全隱患&#xff0c; 甚至一…

Linux: NFS 服務部署與autofs自動掛載的配置

Linux&#xff1a; NFS 服務部署與autofs自動掛載的配置NFS&#xff08;Network File System&#xff0c;網絡文件系統&#xff09;是一種基于 TCP/IP 協議的網絡文件共享協議&#xff0c;允許不同主機在網絡中共享文件資源&#xff0c;實現跨主機的文件訪問與管理&#xff0c;…

【深度學習②】| DNN篇

0 序言 本文將系統介紹基于PyTorch的深度神經網絡&#xff08;DNN&#xff09;相關知識&#xff0c;包括張量的基礎操作、DNN的工作原理、實現流程&#xff0c;以及批量梯度下降、小批量梯度下降方法和手寫數字識別案例。通過學習&#xff0c;你將掌握DNN的核心概念、PyTorch實…

Xcode 26 如何在創建的 App 包中添加特定的目錄

功能需求 在某些情況下,我們需要將特定文件放在 Xcode 編譯鏈接后 App 包里的指定目錄中,比如將 AI 大模型相關文件放在它們對應名稱的目錄中: 正常情況下,Xcode 會將項目目錄中的所有文件都平鋪放到 App 包的根目錄里。那么,要如何形成上面這種文件目錄層級呢? 在本篇…

linux-系統性能監控

linux-系統性能監控一、cpu1.1 查看cpu的信息1.2 cpu性能指標1.3 編寫監控cpu使用率的腳本1.4 查找出使用cpu最高的10個進程二、內存2.1 查看內存信息2.2 交換&#xff08;swap&#xff09;分區2.2.1 查看交換分區的積極程度2.2.2 查看交換分區的大小2.2.3 管理交換分區2.3 編寫…

AgxOrin平臺JetPack5.x版本fix multi-cam race condition 補丁

本文包含三個針對NVIDIA Linux驅動程序的補丁修復: 多攝像頭競爭條件修復 在capture-ivc驅動中新增信號量機制,解決多攝像頭同時操作時的競爭條件問題(Bug 4425972)。主要修改包括在通道上下文結構中添加信號量,并在通道ID通知和取消注冊時進行信號量操作。 內存泄漏修復…

【Go】P3 Go語言程序結構

Go語言程序結構Go語言程序結構命名規則與編程慣例核心規則四種聲明語句詳解var聲明&#xff1a;變量聲明const聲明&#xff1a;常量聲明type聲明&#xff1a;類型定義func聲明&#xff1a;函數聲明簡短變量聲明(:)使用規則和限制指針&#xff1a;安全的內存地址操作基本概念和操…

【機器學習深度學習】知識蒸餾實戰:讓小模型擁有大模型的智慧

目錄 引言&#xff1a;模型壓縮的迫切需求 一、知識蒸餾的核心原理 1.1 教師-學生模式 1.2 軟目標&#xff1a;知識傳遞的關鍵 1.3 蒸餾損失函數 二、實戰&#xff1a;Qwen模型蒸餾實現 2.1 環境配置與模型加載 2.2 蒸餾損失函數實現 2.3 蒸餾訓練流程 2.4 訓練優化技…

基于MCP提示構建工作流程自動化的實踐指南

引言 在現代工作和生活中&#xff0c;我們經常被各種重復性任務所困擾——從每周的膳食計劃到代碼審查反饋&#xff0c;從文檔更新到報告生成。這些任務雖然不復雜&#xff0c;卻消耗了大量寶貴時間。MCP&#xff08;Model Context Protocol&#xff09;提示技術為解決這一問題…

apache-tomcat-11.0.9安裝及環境變量配置

一、安裝從官網上下載apache-tomcat-11.0.9,可以下載exe可執行文件版本&#xff0c;也可以下載zip版本&#xff0c;本文中下載的是zip版本。將下載的文件解壓到指定目錄&#xff1b;打開tomcat安裝目錄下“\conf\tomcat-users.xml”文件&#xff1b;輸入以下代碼&#xff0c;pa…

Java 大視界 -- Java 大數據機器學習模型在電商用戶生命周期價值評估與客戶關系精細化管理中的應用(383)

Java 大視界 -- Java 大數據機器學習模型在電商用戶生命周期價值評估與客戶關系精細化管理中的應用&#xff08;383&#xff09;引言&#xff1a;正文&#xff1a;一、電商用戶運營的 “糊涂賬”&#xff1a;不是所有客戶都該被討好1.1 運營者的 “三大錯覺”1.1.1 錯把 “過客…

豆包新模型與PromptPilot工具深度測評:AI應用開發的全流程突破

目錄引言一、豆包新模型技術解析1.1 豆包新模型介紹1.2 核心能力突破1.2.1 情感交互能力1.2.2 推理與編碼能力二、PromptPilot工具深度測評2.1 PromptPilot介紹2.2 工具架構與核心功能2.3 一個案例講通&#xff1a;市場調研報告2.3.1 生成Prompt2.3.2 批量集生成2.3.3 模擬數據…

【代碼隨想錄day 12】 力扣 144.145.94.前序遍歷中序遍歷后序遍歷

視頻講解&#xff1a;https://www.bilibili.com/video/BV1Wh411S7xt/?vd_sourcea935eaede74a204ec74fd041b917810c 文檔講解&#xff1a;https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E5%85%B6%E4%BB%96%E8%A…

【Unity】 HTFramework框架(六十七)UDateTime可序列化日期時間(附日期拾取器)

更新日期&#xff1a;2025年8月6日。 Github 倉庫&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 倉庫&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引一、UDateTime可序列化日期時間1.定義UDateTime字段2.日期拾取器&#xff08;編輯器&#xff09;3…

Docker的安裝,服務器與客戶端之間的通信

目錄 1、Docker安裝 1.1主機配置 1.2apt源的修改 1.3apt安裝 2、客戶端與服務端通信 2.1服務端配置 2.1.1創建鏡像存放目錄 2.1.2修改配置文件 2.2端口通信 2.3SSH連接 2.3.1生成密鑰 2.3.2傳輸密鑰 2.3.3測試連接 1、Docker安裝 1.1主機配置 我使用的兩臺主機是…

【算法專題訓練】09、累加子數組之和

1、題目&#xff1a;LCR 010. 和為 K 的子數組 https://leetcode.cn/problems/QTMn0o/description/ 給定一個整數數組和一個整數 k &#xff0c;請找到該數組中和為 k 的連續子數組的個數。示例 1&#xff1a; 輸入:nums [1,1,1], k 2 輸出: 2 解釋: 此題 [1,1] 與 [1,1] 為兩…

WinXP配置一鍵還原的方法

使用系統自帶的系統還原功能&#xff1a;啟用系統還原&#xff1a;右鍵點擊 “我的電腦”&#xff0c;選擇 “屬性”&#xff0c;切換到 “系統還原” 選項卡&#xff0c;確保 “在所有驅動器上關閉系統還原” 未被勾選&#xff0c;并為系統驅動器&#xff08;C:&#xff09;設…

基于模式識別的訂單簿大單自動化處理系統

一、系統概述 在金融交易領域&#xff0c;訂單簿承載著海量的交易信息&#xff0c;其中大單的處理對于市場流動性和價格穩定性有著關鍵影響。基于模式識別的訂單簿大單自動化處理系統旨在通過智能算法&#xff0c;精準識別訂單簿中的大單特征&#xff0c;并實現自動化的高效處理…