DUICUO

Playwright、新世代のウェブクロールツール

Playwright は、コードを必要とせずに単一の API を通じて Chromium、Firefox、WebKit ブラウザーを自動化できる、Python 言語用の純粋な自動化ツールです。

テストツールSeleniumには充実したドキュメントがありますが、その学習曲線は多くの初心者にとって困難です。対照的に、Playwright-Pythonは初心者にとってまさに天の恵みです。

Playwrightは本当にPython対応でしょうか?答えはイエスです。MicrosoftはPlaywright for Pythonの準備を整えています。APIに大きな変更がある可能性はありますが、Microsoftは新しいライブラリの使用体験が向上すると確信できる場合にのみ変更を行うと述べているため、その可能性は低いでしょう。また、MicrosoftはChromiumのトレースやカバレッジレポートの収集など、ベンダー固有のAPIの極端なケースのサポートについては注意を促しています。

1. 劇作家入門

Playwright は、単一の API を使用して Chromium、Firefox、WebKit などの主要なブラウザでの操作を自動化し、ヘッドレス モードとヘッド モードの両方をサポートする強力な Python ライブラリです。

Playwright は、Linux、Mac、Windows オペレーティング システムをサポートする、環境に優しく、強力で、信頼性が高く、高速な自動化テクノロジーを提供します。

別の友人はこう褒めていました。「このプロジェクトは、Python言語で純粋な自動化を実現するツールとして、コードを解放し、自動化機能を実現しています。使い方を見てみましょう。」

2. 劇作家による使用

インストール

Playwright のインストールは非常に簡単で、たった 2 つのステップで完了します。

プレイライトライブラリをインストールする
pip インストール プレイライト
ブラウザ ドライバー ファイルをインストールします (インストール プロセスは少し遅くなります)。
python -mプレイライトインストール
コードをコピー

上記の 2 つの pip 操作はそれぞれ以下をインストールします。

  • Playwright 依存関係をインストールするには、Python 3.7 以降が必要です。
  • Chromium、Firefox、WebKit などのブラウザのドライバー ファイルをインストールします。

録音

Playwrightを使えば、コードを1行も書く必要はありません。ブラウザを手動で操作するだけで、操作が記録され、自動的にコードスクリプトが生成されます。

以下は記録されたコマンド codegen です。これは 1 行のみです。

 コマンドラインに `--help` と入力すると、すべてのオプションが表示されます。
python -mプレイライト コードジェネレータ
コードをコピー

codegen の使い方を確認するには、`--help` オプションを使用してください。簡単な使い方としては、コマンドの後に URL リンクを追加するだけです。他に必要なオプションがあれば、追加してください。

 python -mプレイライト コードジェネレータ--help
使用方法: index codegen [オプション] [ URL ]
ページを開いユーザーアクションのコードを生成する
オプション:
- o , --output <ファイル名> は生成されたスクリプトをファイルに保存します
--target <language> 使用する言語。javascript、python、python-async、csharp のいずれか (デフォルト: "python")
-h , --help コマンドのヘルプを表示する
:
$ コード生成
$ codegen --target=python
$ - b ウェブキットコードジェネレータhttps://example.com
コードをコピー

オプションの意味:

  • -o: 記録したスクリプトをファイルに保存する
  • --target: 生成するスクリプトの言語を指定します。JSとPythonの2つのオプションがあります。デフォルトはPythonです。
  • -b: ブラウザドライバを指定します

たとえば、baidu.com で検索し、ドライバーとして Chromium を使用し、結果を my.py という名前の Python ファイルとして保存したいとします。

 python -m playwright codegen --target python -o 'my.py' -b chromium https://www.baidu.com
コードをコピー

コマンドラインを入力すると、ブラウザが自動的に開きます。ブラウザでの操作はすべて自動的にコードに変換されます(以下を参照)。

完了するとブラウザは自動的に閉じられ、生成された自動化スクリプトは .py ファイルに保存されます。

 playwright からsync_playwright をインポート
def run (劇作家) :
ブラウザ= playwright .chromium .launch ( headless = False )
context =ブラウザ.newContext ( )
# 新しいページを開く
ページ= context.newPage ( )
ページ.goto ( "https://www.baidu.com/" )
ページ.click ( "input[name=" wd "]" )
ページ.fill ( "input[name=" wd "]" , "jingdong" )
page.click ( "text=" JD.com "" )
# クリック// a [ normalize - space ( . ) = 'JD.COM 公式サイト: 質の高い生活のために、速く、良く、手頃な価格' ]
page .expect_navigation ( )の場合:
page .expect_popup ( )を popup_info として設定:
page .click ( "//a[normalize-space(.)='JD.COM 公式サイト: 質の高い生活のための高速、高品質、手頃な価格']" )
page1 = ポップアップ情報の値
# ---------------------
コンテキスト.close ( )
ブラウザを閉じる( )
sync_playwright ( )を劇作家として指定:
ラン劇作家)

さらに、playwright は、以下に示すように、同期および非同期 API インターフェースを提供します。

リンク: https://microsoft.github.io/playwright-python/index.html

同期

次のサンプルコード: 3 つのブラウザを順番に開き、Baidu 検索に移動し、スクリーンショットを撮って、終了します。

 playwright からsync_playwright をインポート
sync_playwright ( )を p として:
browser_type が[ p .chromium p .firefox p .webkit ] 場合:
ブラウザ=ブラウザタイプ.launch ( )
ページ= browser.newPage ( )
ページ.goto ( 'https://baidu.com/' )
ページ.screenshot (パス= f 'example-{browser_type.name}.png' )
ブラウザを閉じる( )
コードをコピー

非同期

非同期操作を asyncio と組み合わせて、3 つのブラウザーで同時に操作を実行できます。

非同期インポート
プレイライトからasync_playwrightをインポート
非同期定義メイン( ) :
async_playwright ( )を p として非同期化します:
browser_type が[ p .chromium p .firefox p .webkit ] 場合:
ブラウザ= browser_type .launch ( )を待つ
ページ=ブラウザの.newPage ( )を待つ
ページ.goto ( 'http://baidu.com/' )を待機します。
ページのスクリーンショットを待ちます(パス= f 'example-{browser_type.name}.png' )
ブラウザを閉じるのを待つ
asyncio .get_event_loop ( ) .run_until_complete ( ) main ( )
コードをコピー

携帯

さらに素晴らしいのは、PlayWrightがモバイルデバイスでのブラウザエミュレーションもサポートしていることです。以下は公式ドキュメントに記載されているコードスニペットで、特定の地理的位置にあるiPhone 11 ProのSafariブラウザをシミュレートしています。まずmaps.google.comにアクセスし、次に位置情報の偽装を行ってスクリーンショットを撮影します。

 playwright からsync_playwright をインポート
sync_playwright ( )を p として:
iphone_11 = p .devices [ 'iPhone 11 Pro' ]
ブラウザ= p .webkit .launch (ヘッドレス= False )
context =ブラウザ.newContext (
** iPhone 11
ロケール= 'en-US'
地理位置情報= { '経度' : 12.492507 , '緯度' : 41.889938 } ,
権限= [ '地理位置情報' ]

ページ= context.newPage ( )
ページ.goto ( 'https://maps.google.com' )
page .click ( 'text="あなたの場所"' )
ページ.screenshot (パス= 'colosseum-iphone.png' )
ブラウザを閉じる( )
コードをコピー

さらに、pytest プラグインと組み合わせて使用​​することもできます。ご興味があれば、ぜひお試しください。

3. まとめ

Playwright には、既存の自動テスト ツールに比べて次のような多くの利点があります。

すべてのブラウザをサポート

  • Chromium、Firefox、WebKitでテスト済み。Playwrightは、Google Chrome、Microsoft Edge(Chromium搭載)、Apple Safari(WebKit搭載)、Mozilla Firefoxなど、すべての最新ブラウザのAPIを完全にサポートしています。
  • クロスプラットフォームのWebKitテスト。Playwrightを使用して、Windows、Linux、macOS向けのWebKitでビルドし、Apple Safariでのアプリの動作をテストできます。ローカルおよびCIでテストできます。
  • モバイルデバイスをテストします。デバイスエミュレーションを使用して、モバイルWebブラウザでアダプティブWebアプリケーションをテストします。
  • ヘッダーレスモードとヘッダー付きモード。Playwrightは、すべてのブラウザとプラットフォームで、ヘッダーレスモード(ブラウザUIなし)とヘッダー付きモード(ブラウザUIあり)の両方をサポートしています。ヘッダー付きモードはデバッグに適しており、ヘッダーレスモードはCI/クラウド実行に適しています。

高速かつ信頼性の高い実行

  • APIを自動的に待機します。Playwrightインタラクションは、要素の準備ができるまで自動的に待機します。これにより信頼性が向上し、テスト作成プロセスが簡素化されます。
  • タイムアウトや自動イベントはありません。Playwrightは、ネットワークリクエスト、ページナビゲーション、ページロードイベントなどのブラウザ信号を受信し、睡眠の中断による煩わしさを排除します。
  • ブラウザコンテキストと並列に動作します。複数の独立したブラウザコンテキスト実行環境では、単一のブラウザインスタンスを再利用できます。
  • 柔軟な要素セレクタ。Playwrightは、ユーザー向けの文字列(テキストコンテンツやアクセシビリティタグなど)を使用して要素を選択できます。これらの文字列は、DOM構造に密接に結合されたセレクタよりも柔軟性があります。

強力な自動化機能を備えている

  • 複数のドメイン、ページ、フレーム。Playwright は、ページ内の JavaScript 実行範囲に制限されず、複数のページを含むシナリオを自動的に実行できるアウトオブプロセス自動化ドライバーです。
  • 強力なネットワーク制御。Playwright は、コンテキスト スコープのネットワーク インターセプションを導入し、ネットワーク要求を終了またはシミュレートします。
  • 最新の Web 機能。Playwright は、挿入セレクター、地理位置情報、権限、Web Workers、その他の最新の Web API を通じて Web コンポーネントをサポートします。
  • あらゆるシナリオに対応する機能。ファイルのダウンロードとアップロード、アウトオブプロセス iframe、ネイティブ入力イベント、さらにはダークモードもサポートします。

しかし、それにも限界はあります。

  • 旧バージョンのEdgeとIE11をサポートしています。Playwrightは旧バージョンのMicrosoft EdgeとIE11をサポートしていません(非推奨のお知らせ)。新しいMicrosoft Edge(Chromium版)をサポートしています。
  • Java言語バインディング:Playwright APIは現在、JavaおよびRubyでは利用できません。これは、Playwrightがあらゆる言語のバインディングをサポートするように設計されているため、一時的な制限です。
  • 実際のモバイル デバイスでのテスト: Playwright はデスクトップ ブラウザーを使用してモバイル デバイスをシミュレートします。

Playwrightはいくつかの制限事項はあるものの、バージョン1.7.0にアップデートされました。アップデートを重ねるごとに、システムはより充実したものになります。誰もが多くの手間を省く初心者向けツールとして、Playwrightの未来は明るいと確信しています。