はじめに - ライブラリ
インストール
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の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_for_timeout
) メソッドを使用してください。これは、Playwrightが内部的に非同期操作に依存しており、time.sleep(5)
を使用するとそれらが正しく処理されないためです。
Windows上のasyncio
のSelectorEventLoop
と互換性がない
Playwrightはドライバーをサブプロセスで実行するため、SelectorEventLoop
が非同期サブプロセスをサポートしていないため、Windows上ではasyncio
のProactorEventLoop
が必要です。
Windows Python 3.7では、PlaywrightはデフォルトのイベントループをProactorEventLoop
に設定します。これはPython 3.8以降のデフォルトと同じです。
スレッド処理
PlaywrightのAPIはスレッドセーフではありません。マルチスレッド環境でPlaywrightを使用する場合は、スレッドごとにPlaywrightインスタンスを作成する必要があります。詳細については、スレッドに関する問題を参照してください。