メインコンテンツにスキップ

入門 - ライブラリ

インストール

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 スクリプトで Playwright を import し、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.dokyumento.jp")
print(page.title())
browser.close()

Playwright は、同期 API と非同期 API の 2 つのバリエーションをサポートしています。最新のプロジェクトで 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.dokyumento.jp")
print(await page.title())
await browser.close()

asyncio.run(main())

最初のスクリプト

最初のスクリプトでは、https://playwright.dokyumento.jp/ に移動し、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.dokyumento.jp/")
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.dokyumento.jp/")
page.screenshot(path="example.png")
browser.close()
playwright.stop()

asyncio REPL などの非同期 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.dokyumento.jp/")
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.dokyumento.jp/")
page.screenshot(path="example.png")
browser.close()

実行可能ファイルにブラウザをバンドルしたい場合

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

ブラウザを実行可能ファイルにバンドルすると、バイナリが大きくなります。使用するブラウザのみをバンドルすることをお勧めします。

既知の問題

time.sleep() は古い状態につながる

ほとんどの場合、Playwright には自動ウェイト機能があるため、手動で待機する必要はありません。それでも手動ウェイトに頼る場合は、time.sleep(5) の代わりに page.wait_for_timeout(5000) を使用する必要があります。タイムアウトをまったく待たない方が良いですが、デバッグに役立つ場合があります。そのような場合は、time モジュールの代わりに、Playwright の wait (wait_for_timeout) メソッドを使用してください。これは、Playwright が内部的に非同期操作に依存しており、time.sleep(5) を使用すると、非同期操作が正しく処理されないためです。

Windows 上の asyncio の SelectorEventLoop と互換性がない

Playwright はドライバをサブプロセスで実行するため、Windows 上の asyncio の ProactorEventLoop が必要です。なぜなら、SelectorEventLoop は非同期サブプロセスをサポートしていないためです。

Windows Python 3.7 では、Playwright はデフォルトのイベントループを Python 3.8+ でのデフォルトである ProactorEventLoop に設定します。

スレッディング

Playwright の API はスレッドセーフではありません。マルチスレッド環境で Playwright を使用している場合は、スレッドごとに Playwright インスタンスを作成する必要があります。詳細については、スレッディングの問題を参照してください。