Puppeteer 瀏覽器自動化操作工具

pyppeteer 是 Python 版本的 Puppeteer,而 Puppeteer 是由 Google 開發的一個 Node.js 庫,用于控制 Chrome 或 Chromium 瀏覽器。pyppeteer 允許你通過 Python 代碼自動化操作瀏覽器,實現網頁爬取、自動化測試、生成截圖或 PDF 等功能。

核心功能

  1. 網頁自動化操作:模擬用戶在瀏覽器中的各種行為(點擊、輸入、滾動等)。
  2. 網頁內容爬取:獲取動態渲染的網頁內容(如 JavaScript 加載的數據)。
  3. 生成截圖/PDF:將網頁保存為圖片或 PDF 文件。
  4. 性能分析:分析網頁加載性能,生成性能報告。
  5. 自動化測試:模擬用戶交互,測試網頁功能。

與其他工具的對比

工具語言特點
Selenium多語言需要瀏覽器驅動(如 ChromeDriver),功能全面但配置復雜。
BeautifulSoupPython僅處理靜態 HTML,無法解析動態內容。
ScrapyPython高效的爬蟲框架,但無法處理 JavaScript 渲染的內容。
pyppeteerPython直接控制瀏覽器,無需額外驅動,適合處理復雜動態頁面。

基本使用流程

1. 安裝
pip install pyppeteer

首次運行時,pyppeteer 會自動下載 Chromium 瀏覽器(約 100MB)。

2. 簡單示例:打開網頁并截圖
import asyncio
from pyppeteer import launchasync def main():# 啟動瀏覽器browser = await launch()# 創建新頁面page = await browser.newPage()# 導航到目標 URLawait page.goto('https://example.com')# 截圖await page.screenshot({'path': 'example.png'})# 關閉瀏覽器await browser.close()# 運行異步函數
asyncio.get_event_loop().run_until_complete(main())
3. 示例:爬取動態內容
import asyncio
from pyppeteer import launchasync def main():browser = await launch()page = await browser.newPage()await page.goto('https://example.com')# 等待特定元素加載完成await page.waitForSelector('.dynamic-content')# 獲取元素文本content = await page.querySelectorEval('.dynamic-content', 'el => el.textContent')print(content)await browser.close()asyncio.get_event_loop().run_until_complete(main())

高級用法

1. 模擬用戶交互
# 點擊按鈕
await page.click('button.login')# 輸入文本
await page.type('input[name="username"]', 'your_username')# 提交表單
await page.keyboard.press('Enter')
2. 處理彈窗
page.on('dialog', lambda dialog: asyncio.ensure_future(handle_dialog(dialog)))async def handle_dialog(dialog):print(dialog.message)await dialog.accept()  # 或 .dismiss()
3. 執行 JavaScript 代碼
# 執行 JS 函數
result = await page.evaluate('() => window.innerWidth')
print(f"瀏覽器寬度: {result}px")# 獲取元素屬性
attr = await page.querySelectorEval('img', 'el => el.src')
4. 生成 PDF
await page.pdf({'path': 'page.pdf', 'format': 'A4'})

注意事項

  1. 異步編程pyppeteer 基于 asyncio,所有操作都是異步的,需熟悉 async/await 語法。
  2. 性能考慮:啟動瀏覽器開銷較大,建議批量處理任務。
  3. 反爬機制:頻繁請求可能觸發網站反爬策略,可設置隨機 User-Agent 或延時。
  4. 資源釋放:確保調用 browser.close() 釋放瀏覽器資源。

應用場景

  • 網頁爬蟲:抓取動態渲染的內容(如單頁應用)。
  • 自動化測試:模擬用戶行為,測試網站功能。
  • 生成報告:將網頁內容導出為 PDF 或圖片。
  • 監控網站:定期檢查網站內容變化。
  • 性能優化:分析頁面加載時間,識別性能瓶頸。

相關工具

  • puppeteer:原版 Node.js 庫,功能更全面。
  • playwright-python:Microsoft 開發的跨瀏覽器自動化工具,支持 Chrome、Firefox、Safari 等。
  • selenium:老牌自動化測試工具,支持更多瀏覽器。

如果需要更簡潔的 API 或跨瀏覽器支持,可考慮 playwright-python

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

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

相關文章

接口性能測試-工具JMeter的學習

接口登錄鏈接http://111.230.19.204:8080/blog_login.html 一、JMeter基本使用流程 1、啟動Jmeter 2、在“測試計劃”下添加線程組 3、在“線程組”下添加“HTTP”取樣器 4、填寫“HTTP請求”的相關請求數據 5、在“線程組”下添加“查看結果樹”監聽器 6、點擊“啟動”按鈕…

mybatis-plus與jsqlparser共用時報sql解析錯誤

手動引入jsqlparser-4.6版本,但mybatis-plus中引用為4.4版本 解決方法一: jsqlparser版本與mybatis-plus中引用版本一致。 解決方法而二: 排除掉mybatis-plus中的jsqlparser。

用MMdetection框架訓練自己的數據集(全流程實戰)

前面我們準備好了COCO格式的數據集:將YOLO格式的數據集轉換為mmdetection格式-CSDN博客https://blog.csdn.net/qq_54708219/article/details/148224187?spm1001.2014.3001.5501 下面我們使用MMdetection開始訓練。 1.創建新的數據集類 首先,在mmdet/d…

VS Code中Maven未能正確讀取`settings.xml`中配置的新路徑

在VS Code中Maven未能正確讀取settings.xml中配置的新路徑,通常是由于以下原因導致的: 一、VS Code未使用你修改的settings.xml文件 VS Code的Maven插件可能使用了默認配置或指向其他settings.xml文件。解決方法: 手動指定settings.xml路徑…

2021年認證杯SPSSPRO杯數學建模A題(第二階段)醫學圖像的配準全過程文檔及程序

2021年認證杯SPSSPRO杯數學建模 A題 醫學圖像的配準 原題再現: 圖像的配準是圖像處理領域中的一個典型問題和技術難點,其目的在于比較或融合同一對象在不同條件下獲取的圖像。例如為了更好地綜合多種信息來辨識不同組織或病變,醫生可能使用…

RPM之(1)基礎使用

RPM之(1)基礎使用 Author: Once Day Date: 2025年5月26日 一位熱衷于Linux學習和開發的菜鳥,試圖譜寫一場冒險之旅,也許終點只是一場白日夢… 漫漫長路,有人對你微笑過嘛… 全系列文章可參考專欄: Linux實踐記錄_Once-Day的博客-CSDN博客 …

國內可做大批量pcb的工廠有哪些?

在電子產業升級浪潮中,PCB作為電子設備的基礎載體,其批量生產能力直接決定著終端產品的市場響應速度與品質穩定性。本文精選五家具備核心競爭力的廠商,從工藝深度、產能規模到服務模式展開剖析,為采購決策提供專業參考。 獵板PCB…

【視頻】使用海康SDK保存的MP4無法在瀏覽器(html5)中播放

1、問題描述 在使用海康 SDK 的 NET_DVR_SaveRealData 接口,將視頻流保存成MP4文件后,通過瀏覽器無法播放MP4,播放其它的MP4正常。 2、原因分析 對比可以正常播放的MP4 和 無法播放的MP4文件,比較它們的詳細信息,發…

AI時代新詞-生成對抗網絡(GAN)

一、什么是生成對抗網絡(GAN)? 生成對抗網絡(Generative Adversarial Network,簡稱GAN)是一種由生成器(Generator)和判別器(Discriminator)組成的深度學習模…

使用AutoKeras2.0的AutoModel進行結構化數據回歸預測

1、First of All: Read The Fucking Source Code import autokeras as ak import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error# 生成數據集 np.random.seed(42) x np.random.rand(1000, 10) # 生成1…

實戰設計模式之訪問者模式

概述 訪問者模式允許我們在不改變類的前提下,向已有類添加新的功能。簡單來說,就是將算法與對象的數據結構進行分離的一種方法。在實際應用中,當我們需要對一組對象執行一些操作,而這些操作又需要隨著需求的變化而不斷變化時&…

centos7.9使用docker-compose安裝kafka

docker-compose配置文件 services:zookeeper:image: confluentinc/cp-zookeeper:7.0.1hostname: zookeepercontainer_name: zookeeperports:- "2181:2181"environment:ZOOKEEPER_CLIENT_PORT: 2181ZOOKEEPER_TICK_TIME: 2000kafka:image: confluentinc/cp-kafka:7.0…

STM32:Modbus通信協議核心解析:關鍵通信技術

知識點1【 Modbus通信】 1、Modbus的概述 Modbus是OSI模型第七層的應用層報文傳輸協議 協議:說明有組包和解包的過程 2、通信機制 Modelbus是一個請求/應答協議 通信機制:主機輪詢,從機應答的機制。每個從設備有唯一的地址,主…

LeetCode 3362.零數組變換 III:貪心+優先隊列+差分數組——清晰題解

【LetMeFly】3362.零數組變換 III:貪心優先隊列差分數組——清晰題解 力扣題目鏈接:https://leetcode.cn/problems/zero-array-transformation-iii/ 給你一個長度為 n 的整數數組 nums 和一個二維數組 queries ,其中 queries[i] [li, ri] …

ORM++ 封裝實戰指南:安全高效的 C++ MySQL 數據庫操作

ORM 封裝實戰指南:安全高效的 C MySQL 數據庫操作 一、環境準備 1.1 依賴安裝 # Ubuntu/Debian sudo apt-get install libmysqlclient-dev # CentOS sudo yum install mysql-devel# 編譯時鏈接庫 (-I 指定頭文件路徑 -L 指定庫路徑) g main.cpp -stdc17 -I/usr/i…

JESD204B 協議介紹

一、協議概述 JESD204B是由JEDEC(固態技術協會)制定的高速串行接口標準,專為模數轉換器(ADC)、數模轉換器(DAC)與邏輯器件(如FPGA、ASIC)之間的數據傳輸設計。其核心目標…

yolov8,c++案例匯總

文章目錄 引言多目標追蹤案例人體姿態估計算法手勢姿態估計算法目標分割算法 引言 以下案例,基于c,ncnn,yolov8既可以在windows10/11上部署, 也可以在安卓端部署, 也可以在嵌入式端部署, 服務器端可支持部署封裝為DLL,支持c/c#/java端調用 多目標追蹤案例 基于yolov8, ncnn,…

運動規劃實戰案例 | 圖解基于狀態晶格(State Lattice)的路徑規劃(附ROS C++/Python仿真)

目錄 1 控制采樣 vs 狀態采樣2 State Lattice路徑規劃2.1 算法流程2.2 Lattice運動基元生成2.3 幾何代價函數2.4 運動學約束啟發式 3 算法仿真3.1 ROS C仿真3.2 Python仿真 1 控制采樣 vs 狀態采樣 控制采樣的技術路線源自經典的運動學建模思想。這種方法將機器人的控制指令空…

BERT框架:自然語言處理的革命性突破

引言 在自然語言處理(NLP)領域,2018年Google推出的BERT(Bidirectional Encoder Representations from Transformers)框架無疑是一場革命。作為基于Transformer架構的雙向編碼器表示模型,BERT通過預訓練學習…

【Fifty Project - D31】

結束了一個超級消耗周末,滿安排之健身梅溪湖游泳做飯喝酒羽毛球賽 完全力竭了,久久不能恢復過來,暫停健身安排了 端午后再繼續 今日完成記錄 TimePlan完成情況7:30 - 8:10有氧爬坡√9:00 - 11:…