スポンサーリンク

【Python】スクレイピング・自動化ツールplaywrightを試してみた

【Python】スクレイピング・自動化ツールplaywrightを試してみた

普段業務でブラウザの自動化といえばseleniumを使って自動化していましたが、どうやらplaywrightというライブラリが使いやすいということで、実際に使ってみたいと思います。

実運用できるレベルのコーディングはめんどくさいので、とりあえず導入部分のみで比較していきたいと思います。

自動化ツールは利用方法によって要件が異なってくるので、一概にどっちがいいとは言えないかもしれませんが、とりあえず比較してみましょう。

ちなみに、今回試した環境はこんな感じです。

  • Windows 10 Pro
  • Python 3.8.6

playwrightのインストールと簡単な導入

playwrightのインストール

とりあえず、公式ドキュメントのインストール方法を試してみましょう。

$ pip install playwright==1.8.0a1
$ python -m playwright install

pipを使った一般的なライブラリのインストール方法ですね。

playwrightの簡単な実装

私は新しいライブラリを触る時はまず、ドキュメントを流し読みしてとりあえず動くコードを書き出力内容や、動きを確認してからドキュメントをおって理解してきますので、今回もざっくりとドキュメントを読んでいきましょう。

まずは、下記コードを実行してみたいと思います。

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にアクセスして、ページタイトルを取得するコードっぽいですね。

出力結果

Fast and reliable end-to-end testing for modern web apps | Playwright

実際に確認してみるとやはり、ページタイトルを取得しているみたいですね。

ん?普通にスクレイピングしてきたけど、ドライバーとか用意したっけ?

なんと、playwrightではブラウザのドライバーはこちらで用意しなくても良しなにしてくれるんですね。

これは大きなメリットですね。seleniumでは、ブラウザとブラウザのドライバーのバージョン違いで苦しんだ方も少なくないのではないでしょうか。

playwrightのCLIでの実装

ドキュメントを読んでいくと、非同期の並列処理にも対応しているとのことです。

それは楽だなぁと思っていると、最後にこんな説明があるではないですか。

Command Line Interface CLI can be used to record user interactions and generate Python code

CLIでpythonコードが生成されるだって…?

今まで使ってきたライブラリにこんな機能なかった気がするけど、最近はJSにならってCLIで雛形が生成されるようになってきたのかな?

何はともあれCLIで実行してみましょう。

(-o オプションでファイル出力できるみたいなのでオプション付きで実行してみます)

$ python -m playwright codegen wikipedia.org -o test.py

おお!!ウィキペディアを開くだけの簡単なコードですが、本当に自動生成されました!

これは、簡単に動作確認できるのでいいですね。

ちなみに出力されたファイルの中身はこんな感じでした。

from playwright.sync_api import sync_playwright

def run(playwright):
    browser = playwright.chromium.launch(headless=False)
    context = browser.new_context()

    # Open new page
    page = context.new_page()

    # Go to https://www.wikipedia.org/
    page.goto("https://www.wikipedia.org/")

    # Close page
    page.close()

    # ---------------------
    context.close()
    browser.close()

with sync_playwright() as playwright:
    run(playwright)

seleniumとplaywrightの比較

今までは、自動化ツールといえばseleniumを使ってきましたが、今回触った感じplaywrightもすごくいい感じですね。

まだ導入しかしていないので、実運用できるかどうかは分かりませんがとにかく導入が手軽にできてよかったです。

導入だけでみればplaywrightの圧勝でしたね。

seleniumではChromiumはバージョンの変動が大きすぎたので、FireFoxが主流でしたが、playwrightでは簡単にバージョン管理できそうなので実運用が楽しみです!

seleniumは割と柔軟に待機やパースができましたが、playwrightではどうなんですかね?

この辺りも調査で来たらしていきたいと思います。

Pythonを学びたい方におすすめの書籍

【基礎から学ぶ】

【Djangoを学ぶ】

【ゲームを作る】

 

 

 

コメント