入門 - ライブラリ
インストール
Pip
pip install --upgrade pip
pip install playwright
playwright install
Conda
conda config --add channels conda-forge
conda config --add channels microsoft
conda install playwright
playwright install
これらのコマンドは Playwright パッケージをダウンロードし、Chromium、Firefox、WebKit 用のブラウザバイナリをインストールします。この動作を変更するには、インストールパラメーターを参照してください。
使用法
インストールが完了すると、Python スクリプトで Playwright を import
し、3 つのブラウザ (chromium
、firefox
、webkit
) のいずれかを起動できます。
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 と組み合わせて使用すると、スタンドアロンの実行可能ファイルを作成できます。
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()
実行可能ファイルにブラウザをバンドルしたい場合
- Bash
- PowerShell
- Batch
PLAYWRIGHT_BROWSERS_PATH=0 playwright install chromium
pyinstaller -F main.py
$env:PLAYWRIGHT_BROWSERS_PATH="0"
playwright install chromium
pyinstaller -F main.py
set 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 インスタンスを作成する必要があります。詳細については、スレッディングの問題を参照してください。