跳到主要內容

開始使用 - 函式庫

安裝

Pip

PyPI version

pip install --upgrade pip
pip install playwright
playwright install

Conda

Anaconda version

conda config --add channels conda-forge
conda config --add channels microsoft
conda install playwright
playwright install

這些指令會下載 Playwright 套件並安裝 Chromium、Firefox 和 WebKit 的瀏覽器二進制檔案。若要修改此行為,請參閱安裝參數

用法

安裝完成後,您可以在 Python 腳本中 import Playwright,並啟動 3 種瀏覽器中的任何一種 ( chromiumfirefoxwebkit )。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://playwright.dev.org.tw")
print(page.title())
browser.close()

Playwright 支援兩種 API 變體:同步和非同步。如果您的現代專案使用 asyncio,您應該使用非同步 API

import asyncio
from playwright.async_api import async_playwright

async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://playwright.dev.org.tw")
print(await page.title())
await browser.close()

asyncio.run(main())

第一個腳本

在我們的第一個腳本中,我們將導航到 https://playwright.dev.org.tw/ 並在 WebKit 中截取螢幕截圖。

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
browser = p.webkit.launch()
page = browser.new_page()
page.goto("https://playwright.dev.org.tw/")
page.screenshot(path="example.png")
browser.close()

預設情況下,Playwright 以無頭模式執行瀏覽器。若要查看瀏覽器 UI,請將 headless 選項設定為 False。您也可以使用 slow_mo 來減慢執行速度。在偵錯工具章節中了解更多資訊。

firefox.launch(headless=False, slow_mo=50)

互動模式 (REPL)

您可以啟動互動式 python REPL

python

然後在其中啟動 Playwright 以進行快速實驗

from playwright.sync_api import sync_playwright
playwright = sync_playwright().start()
# Use playwright.chromium, playwright.firefox or playwright.webkit
# Pass headless=False to launch() to see the browser UI
browser = playwright.chromium.launch()
page = browser.new_page()
page.goto("https://playwright.dev.org.tw/")
page.screenshot(path="example.png")
browser.close()
playwright.stop()

非同步 REPL,例如 asyncio REPL

python -m asyncio
from playwright.async_api import async_playwright
playwright = await async_playwright().start()
browser = await playwright.chromium.launch()
page = await browser.new_page()
await page.goto("https://playwright.dev.org.tw/")
await page.screenshot(path="example.png")
await browser.close()
await playwright.stop()

Pyinstaller

您可以將 Playwright 與 Pyinstaller 搭配使用來建立獨立的可執行檔。

main.py
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://playwright.dev.org.tw/")
page.screenshot(path="example.png")
browser.close()

如果您想將瀏覽器與可執行檔捆綁在一起

PLAYWRIGHT_BROWSERS_PATH=0 playwright install chromium
pyinstaller -F main.py
注意

將瀏覽器與可執行檔捆綁在一起會產生更大的二進制檔案。建議僅捆綁您使用的瀏覽器。

已知問題

time.sleep() 會導致過時的狀態

大多數情況下,您不需要手動等待,因為 Playwright 具有自動等待功能。如果您仍然依賴它,您應該使用 page.wait_for_timeout(5000) 而不是 time.sleep(5),最好完全不要等待超時,但有時它對於偵錯很有用。在這些情況下,請使用我們的等待 (wait_for_timeout) 方法而不是 time 模組。這是因為我們內部依賴非同步操作,而當使用 time.sleep(5) 時,它們無法正確處理。

與 Windows 上 asyncioSelectorEventLoop 不相容

Playwright 在子進程中運行驅動程式,因此它在 Windows 上需要 asyncioProactorEventLoop,因為 SelectorEventLoop 不支援非同步子進程。

在 Windows Python 3.7 上,Playwright 將預設事件迴圈設定為 ProactorEventLoop,因為它是 Python 3.8+ 上的預設值。

線程

Playwright 的 API 不是線程安全的。如果您在多線程環境中使用 Playwright,您應該為每個線程建立一個 playwright 實例。有關更多詳細資訊,請參閱線程問題