playwright 教程高級篇:掌握網頁自動化與驗證碼處理等關鍵技術詳解

Playwright 教程高級篇:掌握網頁自動化與驗證碼處理等關鍵技術詳解

本教程將帶您一步步學習如何使用 Playwright——一個強大的瀏覽器自動化工具,來完成網頁任務,例如提交鏈接并處理旋轉驗證碼。我們將按照典型的自動化流程順序,從啟動瀏覽器到關閉瀏覽器,詳細講解每個步驟中用到的Playwright 技術,包括保存用戶會話、規避網站檢測、與用戶交互、操作網頁元素、截取圖像、模擬人類行為等。此外,我們還會探討如何處理iframe 和跨域問題,因為驗證碼常藏在這些復雜場景中。教程使用通用的術語和表達,確保無需特定代碼背景也能理解,適合任何網頁自動化項目。無論您是想自動化表單提交還是挑戰驗證碼,本教程都為您提供準確、實用的Playwright 技能。


自動化流程的逐步解析

自動化流程通常包括啟動瀏覽器、訪問網頁、確認用戶登錄、填寫表單、觸發驗證碼、解決驗證碼、驗證結果并清理資源。以下按此順序分解每個 Playwright 技術的應用,清晰說明其功能、用途和實現方法。


1. 啟動瀏覽器并保存會話數據

這是什么步驟? 啟動瀏覽器并配置一個存儲空間,用于保存登錄信息(如 cookies),以避免每次運行都需要重新登錄。

Playwright 如何實現? Playwright 支持通過持久化上下文啟動瀏覽器(例如 Chromium),將 cookies 和會話數據保存在本地文件夾中,區別于隱身模式(隱身模式關閉后清空數據)。

關鍵技術:

  • 持久化上下文:使用 playwright.chromium.launch_persistent_context,指定一個存儲路徑(如 ./browser_data),保存 cookies、瀏覽器緩存等數據,供后續運行復用。
  • 創建存儲目錄:通過 Python 的 os.path.exists 檢查存儲路徑是否存在,若不存在則用 os.makedirs 創建,確保程序順利運行。
  • 顯示瀏覽器:設置 headless=False,讓瀏覽器可見,便于觀察操作或調試。
  • 自定義瀏覽器路徑:通過 executable_path 指定特定的瀏覽器可執行文件,適用于需要特定版本的場景。
  • 瀏覽器配置
    • 使用 --disable-infobars 參數隱藏瀏覽器頂部提示條(如“瀏覽器正被自動化控制”)。
    • 移除 --enable-automation 參數,避免網站檢測到自動化行為。
    • 設置真實的 user_agent(如模擬 Windows 上的 Chrome 瀏覽器),使瀏覽器行為更像普通用戶。

示例代碼:

from playwright.sync_api import sync_playwright
import oswith sync_playwright() as p:data_dir = "./browser_data"if not os.path.exists(data_dir):os.makedirs(data_dir)context = p.chromium.launch_persistent_context(user_data_dir=data_dir,headless=False,args=["--disable-infobars"],ignore_default_args=["--enable-automation"],user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0")

為什么重要? 保存會話數據就像給瀏覽器一個“記事本”,讓它記住登錄狀態,省去重復登錄的麻煩。合理的配置還能讓瀏覽器顯得更像真人操作,降低被網站攔截的風險。

如何應用? 啟動持久化上下文時,指定一個固定路徑存儲數據。設置 headless=False 便于測試,并調整瀏覽器參數以模擬正常用戶行為。這就像為瀏覽器準備一個舒適的家,存儲它的記憶。


2. 復用瀏覽器的默認頁面

這是什么步驟? 直接使用瀏覽器啟動時自帶的頁面(標簽頁),而不是額外打開新頁面。

Playwright 如何實現? 每次啟動瀏覽器上下文時,Playwright 自動創建一個頁面(類似于瀏覽器的一個標簽頁)。您可以直接使用這個默認頁面進行操作,保持簡潔高效。

關鍵技術:

  • 訪問頁面:通過 context.pages 獲取所有打開的頁面列表,默認頁面通常是 pages[0]。
  • 復用頁面:直接操作 context.pages[0],無需調用 context.new_page() 創建新頁面。
  • 安全檢查:確認 context.pages 不為空,以防瀏覽器未正確初始化。

示例代碼:

if not context.pages:print("錯誤:未找到默認頁面!")exit()
page = context.pages[0]
print("正在使用默認頁面")

為什么重要? 復用默認頁面就像用桌面上已有的紙張寫字,無需再拿一張新的。節省資源的同時讓腳本邏輯更清晰。

如何應用? 啟動上下文后,取出 context.pages[0] 作為操作頁面,并在代碼中檢查其是否存在。僅在需要多任務并行時才創建新頁面。


3. 規避網站對自動化的檢測

這是什么步驟? 調整瀏覽器屬性,隱藏自動化腳本的痕跡,讓網站認為您是普通用戶。

Playwright 如何實現? Playwright 可以在瀏覽器中運行 JavaScript 代碼,修改特定屬性,結合啟動時的配置,偽裝成常規瀏覽器。

關鍵技術:

  • 隱藏 Webdriver:通過 JavaScript 將 navigator.webdriver 設置為 undefined,因為普通瀏覽器無此屬性。
  • 模擬瀏覽器環境:添加 window.chrome 等屬性,偽裝成 Chrome 瀏覽器。
  • 偽造語言設置:將 navigator.languages 設置為常見值(如 [“zh-CN”, “zh”, “en”]),符合用戶習慣。
  • 模擬插件:為 navigator.plugins 設置一個簡單的數組,假裝瀏覽器安裝了擴展。
  • 運行 JavaScript:使用 page.evaluate 在瀏覽器中執行這些修改。

示例代碼:

page.evaluate("""Object.defineProperty(navigator, 'webdriver', {get: () => undefined});window.chrome = window.chrome || {};Object.defineProperty(navigator, 'languages', {get: () => ['zh-CN', 'zh', 'en']});Object.defineProperty(navigator, 'plugins', {get: () => [1, 2, 3]});
""")

為什么重要? 許多網站會檢查瀏覽器屬性以識別自動化腳本。這些修改讓 Playwright 像一個普通用戶,順利通過檢測,就像穿上合適的衣服融入人群。

如何應用? 在頁面加載后,使用 page.

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

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

相關文章

數據結構(完)

樹 二叉樹 構建二叉樹 int value;Node left;Node right;public Node(int val) {valueval;} 節點的添加 Node rootnull;public void insert(int num) {Node nodenew Node(num);if(rootnull) {rootnode;return;}Node index root;while(true) {//插入的節點值小if(index.value&g…

FastAPI與SQLAlchemy數據庫集成與CRUD操作

title: FastAPI與SQLAlchemy數據庫集成與CRUD操作 date: 2025/04/16 09:50:57 updated: 2025/04/16 09:50:57 author: cmdragon excerpt: FastAPI與SQLAlchemy集成基礎包括環境準備、數據庫連接配置和模型定義。CRUD操作通過數據訪問層封裝和路由層實現,確保線程安全和事務…

一個基于Django的寫字樓管理系統實現方案

一個基于Django的寫字樓管理系統實現方案 用戶現在需要我用Django來編寫一個寫字樓管理系統的Web版本,要求包括增刪改查寫字樓的HTML頁面,視頻管理功能,本地化部署,以及人員權限管理,包含完整的代碼結構和功能實現&am…

mongodb在window10中創建副本集的方法,以及node.js連接副本集的方法

創建Mongodb的副本集最好是新建一個文件夾,如D:/data,不要在mongodb安裝文件夾里面創建副本集,雖然這樣也可以,但是容易造成誤操作或路徑混亂;在新建文件夾里與現有 MongoDB 數據隔離,避免誤操作影響原有數…

Maven 多倉庫與鏡像配置全攻略:從原理到企業級實踐

Maven 多倉庫與鏡像配置全攻略:從原理到企業級實踐 一、核心概念:Repository 與 Mirror 的本質差異 在 Maven 依賴管理體系中,repository與mirror是構建可靠依賴解析鏈的兩大核心組件,其核心區別如下: 1. Repositor…

STM32 四足機器人常見問題匯總

文章不介紹具體參數,有需求可去網上搜索。 特別聲明:不論年齡,不看學歷。既然你對這個領域的東西感興趣,就應該不斷培養自己提出問題、思考問題、探索答案的能力。 提出問題:提出問題時,應說明是哪款產品&a…

MySQL 中 `${}` 和 `#{}` 占位符詳解及面試高頻考點

文章目錄 一、概述二、#{} 和 ${} 的核心區別1. 底層機制代碼示例 2. 核心區別總結 三、為什么表名只能用 ${}?1. 預編譯機制的限制2. 動態表名的實現 四、安全性注意事項1. ${} 的風險場景2. 安全實踐 五、面試高頻考點1. 基礎原理類問題**問題 1**:**問…

C語言編譯預處理2

#include <XXXX.h>和#include <XXXX.c> #include "XXXX.h" 是 C 語言中一條預處理指令 #include <XXXX.h>&#xff1a;這種形式用于包含系統標準庫的頭文件。預處理器會在系統默認的頭文件搜索路徑中查找XXXX.h 文件。例如在 Linux 系統中&#…

Elasticvue-輕量級Elasticsearch可視化管理工具

Elasticvue一個免費且開源的 Elasticsearch 在線可視化客戶端&#xff0c;用于管理 Elasticsearch 集群中的數據&#xff0c;完全支持 Elasticsearch 版本 8.x 和 7.x. 功能特色&#xff1a; 集群概覽索引和別名管理分片管理搜索和編輯文檔REST 查詢快照和存儲庫管理支持國際…

Git提交規范及最佳實踐

Git 提交規范通常是為了提高代碼提交的可讀性、可維護性和自動化效率&#xff08;如生成 ChangeLog&#xff09;。以下是常見的 Conventional Commits 規范&#xff0c;結合社區最佳實踐總結而成&#xff1a; 1. 提交格式 每次提交的 commit message 應包含三部分&#xff1a;…

Ubuntu中snap

通過Snap可以安裝眾多的軟件包。需要注意的是&#xff0c;snap是一種全新的軟件包管理方式&#xff0c;它類似一個容器擁有一個應用程序所有的文件和庫&#xff0c;各個應用程序之間完全獨立。所以使用snap包的好處就是它解決了應用程序之間的依賴問題&#xff0c;使應用程序之…

android studio 運行java main報錯

運行某個帶main函數的java文件報錯 Could not create task :app:Test.main(). > SourceSet with name main not found. 解決辦法&#xff1a;在工程的.idea/gradle.xml 文件下添加&#xff1a; <option name"delegatedBuild" value"false" /&g…

openssh離線一鍵升級腳本分享(含安裝包)

查看當前的版本 [rootmyoracle ~]#ssh -V相關安裝包下載地址 openssh下載地址&#xff1a;http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssl下載地址&#xff1a;https://www.openssl.org/source/zlib下載地址&#xff1a;http://www.zlib.net/今天演示從7.4升級…

Mac M1管理多個Node.js版本

目錄 1. 使用 nvm (Node Version Manager) 1.1.安裝 nvm 1.2.安裝Node.js版本 1.3.查看已安裝的node版本列表 1.4.使用特定版本的Node.js 1.5.查看當前使用的版本 2. 使用 fnm (Fast Node Manager) 2.1.安裝 fnm 2.2.安裝Node.js版本 2.3.查看已安裝的版本 2.4.使用…

Unity中國戰略調整簡訊:Unity6下架 團結引擎接棒

Unity中國戰略調整簡訊&#xff1a;Unity6下架 團結引擎接棒 免費版 2025年4月9日 —— Unity中國宣布自即日起&#xff0c;中國大陸及港澳地區停止提供Unity 6及后續版本下載與服務&#xff0c;相關功能由國產引擎“團結引擎”承接。國際版2022 LTS及更早版本仍由Unity中國維護…

TestNG 單元測試詳解

1、測試環境 jdk1.8.0 121 myeclipse-10.0-offline-installer-windows.exe TestNG 插件 org.testng.eclipse 6.8.6.20130607 0745 2、介紹 套件(suite):由一個 XML 文件表示,通過<suite>標簽定義,包含一個或更多測試(test)。測試(test):由<test>定義&#xf…

C復習(主要復習)

指針和數組 指針數組是一個數組&#xff0c;數組的每個元素都是指針。它適用于需要存儲多個指針的場景&#xff0c;如字符串數組。數組指針是一個指針&#xff0c;指向一個數組。它適用于需要傳遞整個數組給函數或處理多維數組的場景。 函數指針&#xff1a;函數指針的定義需要…

探索大語言模型(LLM):定義、發展、構建與應用

文章目錄 引言大規模語言模型的基本概念大規模語言模型的發展歷程1. 基礎模型階段&#xff08;2018年至2021年&#xff09;2. 能力探索階段&#xff08;2019年至2022年&#xff09;3. 突破發展階段&#xff08;以2022年11月ChatGPT的發布為起點&#xff09; 大規模語言模型的構…

5. k8s 之 pod原理與使用

Kubernetes Pod 原理詳解 1. Pod 的部署方式 Pod 是 Kubernetes 的最小調度單元&#xff0c;其部署方式分為 聲明式&#xff08;YAML&#xff09; 和 命令式&#xff08;kubectl&#xff09; 兩種&#xff1a; (1) 聲明式部署&#xff08;推薦&#xff09; 通過 YAML 文件定…

使用PyTorch實現目標檢測邊界框轉換與可視化

一、引言 在目標檢測任務中&#xff0c;邊界框&#xff08;Bounding Box&#xff09;的坐標表示與轉換是核心基礎操作。本文將演示如何&#xff1a; 實現邊界框的兩種表示形式&#xff08;角點坐標 vs 中心坐標&#xff09;之間的轉換 使用Matplotlib在圖像上可視化邊界框 驗…