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

はじめに - ライブラリ

インストール

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つの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.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

Pyinstallerを使用してPlaywrightをスタンドアロン実行可能ファイルを作成できます。

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

Windows上のasyncioSelectorEventLoopとの非互換性

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

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

スレッド処理

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