PythonでPlaywright
Playwrightとは?
Playwrightは、Microsoftによって開発されたオープンソースの自動化ライブラリで、Webブラウザーの自動操作を可能にします。ヘッドレスブラウザー(バックグラウンドで実行されるブラウザー)と非ヘッドレスブラウザーの両方で動作し、主にテストやWebスクレイピングの目的で使用されます。
JavaScript、TypeScript、Python、Java、C# など、複数のプログラミング言語に対応しています。今回はPythonでPlaywrightを使ってみました。
インストール
pip install pytest-playwright
playwright install
サンプルスクリプトを実行
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("http://playwright.dev")
print(page.title())
browser.close()
ドキュメントにあるサンプルスクリプトを実行してみました。このスクリプトはhttp://playwright.devにアクセスして、ページのタイトルを取得して表示するものです。
全体の流れは下記の通りです。
Playwrightを同期モードで使用するための関数sync_playwrightをインポートしてセットアップしています。
pオブジェクト(Playwrightのインスタンス)からChromiumブラウザを起動
new_page()で新しいページ(タブ)を開きます。
page.goto()メソッドを使用して、指定されたURLに移動します。
page.title()メソッドで現在のページのタイトルを取得しています。
テストやWebスクレイピングで行ういくつかのベーシックな動作について確認してみます。
セレクタで要素を取得
IDやクラス名といったセレクタを使って要素を取得してみます。
Playwrightでは、locator()メソッドを使用してページ上の特定の要素をセレクタに基づいて選択し、その後でtext_content()メソッドを使用して要素のテキストを取得するといった操作を行うことが出来ます。
先程のサンプルスクリプトを変更して赤枠で囲んだテキストを取得してみます。
以下のように変更しました。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("http://playwright.dev")
print(page.locator(".hero__title").text_content())
browser.close()
実行すると下記のテキストが出力されます。
ページ遷移を行う
次はページ遷移の操作を行ってみます。
画像の赤枠(GET STARTED)のリンクへ遷移してみます。
下記のようにスクリプトを変更しました。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("http://playwright.dev")
page.click("a.getStarted_Sjon")
page.wait_for_load_state("networkidle")
print(page.title())
browser.close()
流れとしては下記の通りです。
リンクのクリックによるページ遷移を行うためにpage.click("a.getStarted_Sjon")を実施しています。
ページ遷移の待機をpage.wait_for_load_state("networkidle")を使用して、ページのロードが完了するまで待機します。
最後に遷移後のページタイトルを表示します。
ページの遷移が確認出来ました。
スクリーンショットを撮る
最後に遷移後のページについてスクリーンショットを撮ってみます。
スクリプトを下記のように変更します。
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("http://playwright.dev")
page.click("a.getStarted_Sjon")
page.wait_for_load_state("networkidle")
print(page.title())
page.screenshot(path="example_screenshot.png", full_page=True)
browser.close()
page.screenshot(path=filename, full_page=True)を使用してページのスクリーンショットを撮り、指定したファイル名で保存します。
実行すると下記のようにページ全体のスクリーンショットが撮れます。