Playwrightでブラウザバイナリをカスタムするには?
Playwrightの概要
Playwrightはブラウザの自動化ツールです。似たようなツールにSeleniumがあり、Webアプリケーションのテストやスクレイピングに使われます。どちらのツールも優れた機能を持っていますが、Playwrightは複数のブラウザエンジンに対応可能なことや、ネイティブなヘッドレスモード、ページのスクリーンショットやPDF生成が簡単なことなどが強みです。Playwrightの動作には、複数のブラウザバイナリが必要です。この記事でブラウザバイナリを指定して用いる方法を紹介します。
また、下記のリンク先ではPlaywrightの導入方法や、簡単なサンプルコードを紹介しています。よろしかったらご参照ください。
Playwrightで必要なブラウザバイナリ
Playwrightでは、複数のブラウザ(Chromium, Firefox, WebKit)のバイナリを直接利用します。Playwrightを使ってブラウザを自動化する際、これらのバイナリが必要です。バイナリは、ブラウザのUIを表示したり、ヘッドレスモードでバックグラウンド実行するために使われるため、正しくインストールされ、Playwrightがそれにアクセスできる状態である必要があります。
以下のコマンドで、Playwrightがサポートする各ブラウザのバイナリをインストールできます。
playwright install
このコマンドを実行すると、以下のブラウザバイナリがインストールされます:
- Chromium(Google ChromeやMicrosoft Edgeのベースとなるブラウザエンジン)
- Firefox
- WebKit(Safariのベースとなるブラウザエンジン)
Playwrightでカスタムバイナリを使う方法
Playwrightはデフォルトで、自動的にインストールしたバイナリを使用しますが、特定のブラウザバージョンやカスタムのブラウザバイナリを使用したい場合もあります。その場合、カスタムのバイナリパスを指定することが可能です。
特定バージョンの Chromium を使う場合
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False, executable_path='/path/to/your/custom/chromium')
page = browser.new_page()
page.goto('https://google.com')
print(page.title())
browser.close()
なお、FirefoxやWebkitを使用する場合、browserのインスタンス変数生成を
下記のように変更します。
# Firefoxブラウザを指定
browser = p.firefox.launch(headless=False)
# Webkit ブラウザを指定
browser = p.webkit.launch(headless=False)
このサンプルプログラムを実行ソウルと、googleにアクセスし、ブラウザタイトルを取得します。
ヘッドレスモード(ブラウザを非表示状態)で起動したい場合は、launchメソッドの中の headlessをTrueにしてください。
おまけ:Playwrightを非同期で実行するには?
ヘッドレスモードでPlaywrihgtを実行する場合は、非同期( 複数のタスクを同時に処理可能)が好ましいですよね。特にI/O関連の処理を多く含む場合には、非同期(並行処理)を採用することで効率的にタスクを処理できるため、全体のパフォーマンスが向上します。Playwrightを非同期で実装する際の基本的なコードは以下の通りです。
import asyncio
from playwright.async_api import async_playwright
async def run():
# Playwrightを非同期モードで起動
async with async_playwright() as playwright:
# ヘッドレスモードでChromiumを起動
browser = await playwright.chromium.launch(headless=True)
# 新しいページを開く
page = await browser.new_page()
# 任意のサイトにアクセス
await page.goto('https://google.com')
# ページタイトルを取得して出力
print(await page.title())
# スクリーンショットを撮影
await page.screenshot(path='google.png')
# ブラウザを閉じる
await browser.close()
# asyncioのイベントループを起動
asyncio.run(run())
おわりに
Playwrightで使うブラウザバイナリをカスタムする方法を紹介しました。ちょっとよくわからない、ここのところも詳しく!などなどございましたら、お気軽にコメントいただければ幸いです。
Discussion