pyppeteer
是 Python 版本的 Puppeteer,而 Puppeteer 是由 Google 開發的一個 Node.js 庫,用于控制 Chrome 或 Chromium 瀏覽器。pyppeteer
允許你通過 Python 代碼自動化操作瀏覽器,實現網頁爬取、自動化測試、生成截圖或 PDF 等功能。
核心功能
- 網頁自動化操作:模擬用戶在瀏覽器中的各種行為(點擊、輸入、滾動等)。
- 網頁內容爬取:獲取動態渲染的網頁內容(如 JavaScript 加載的數據)。
- 生成截圖/PDF:將網頁保存為圖片或 PDF 文件。
- 性能分析:分析網頁加載性能,生成性能報告。
- 自動化測試:模擬用戶交互,測試網頁功能。
與其他工具的對比
工具 | 語言 | 特點 |
---|---|---|
Selenium | 多語言 | 需要瀏覽器驅動(如 ChromeDriver),功能全面但配置復雜。 |
BeautifulSoup | Python | 僅處理靜態 HTML,無法解析動態內容。 |
Scrapy | Python | 高效的爬蟲框架,但無法處理 JavaScript 渲染的內容。 |
pyppeteer | Python | 直接控制瀏覽器,無需額外驅動,適合處理復雜動態頁面。 |
基本使用流程
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'})
注意事項
- 異步編程:
pyppeteer
基于 asyncio,所有操作都是異步的,需熟悉async/await
語法。 - 性能考慮:啟動瀏覽器開銷較大,建議批量處理任務。
- 反爬機制:頻繁請求可能觸發網站反爬策略,可設置隨機 User-Agent 或延時。
- 資源釋放:確保調用
browser.close()
釋放瀏覽器資源。
應用場景
- 網頁爬蟲:抓取動態渲染的內容(如單頁應用)。
- 自動化測試:模擬用戶行為,測試網站功能。
- 生成報告:將網頁內容導出為 PDF 或圖片。
- 監控網站:定期檢查網站內容變化。
- 性能優化:分析頁面加載時間,識別性能瓶頸。
相關工具
- puppeteer:原版 Node.js 庫,功能更全面。
- playwright-python:Microsoft 開發的跨瀏覽器自動化工具,支持 Chrome、Firefox、Safari 等。
- selenium:老牌自動化測試工具,支持更多瀏覽器。
如果需要更簡潔的 API 或跨瀏覽器支持,可考慮 playwright-python
。