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

はじめに - ライブラリ

インストール

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の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_for_timeout) メソッドを使用してください。これは、Playwrightが内部的に非同期操作に依存しており、time.sleep(5)を使用するとそれらが正しく処理されないためです。

Windows上のasyncioSelectorEventLoopと互換性がない

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

Windows Python 3.7では、PlaywrightはデフォルトのイベントループをProactorEventLoopに設定します。これはPython 3.8以降のデフォルトと同じです。

スレッド処理

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