PlaywrightでBot判定され辛くする方法

NeeNetです。

今回は、PlaywrightでBot判定され辛くする方法をご紹介します。

はじめに

Playwrightとは

Playwright(プレイライト)は、Microsoftが開発したオープンソースのWeb UI自動化・E2Eテストツールです。

ChromiumやFirefoxといった主要なブラウザで、単一のAPIを使ってクロスブラウザテストを効率的に実行できます。

一方で、スクレイピングや自動化で良く利用されるSeleniumの代わりとして、Playwrightを利用されているケースも散見されます。

PlaywrightのBot判定について

大前提として、スクレイピングや自動化は対象サイトに大きな負荷がかからないよう最大限の配慮を行う必要があります。

とはいえ、例えばAPIが利用できない環境下での定期情報収集や、SNSでのダイレクトメッセージの送信といった作業の自動化など、どうしても機械的に作業を行いたいケースはあると思います。

しかし、Playwrightをただ利用しただけではサイト側からBot判定されてしまい、アクセスが拒否されるなどして、処理の自動化ができないケースがあります。

2025年時点で「古い」対応策

少し検索すると、Bot判定を回避するための playwright_stealth というライブラリを紹介するページが出てきます。

ただ、こちらのライブラリは数年間開発が止まっている状況で、2025年現在では積極的に採用する手法では無いかなという印象です。

対応策

まず、Bot判定され辛くするためのPlaywrightに対する代表的なパッチとして rebrowser-patches があるのですが、こちらは少々設定が煩雑な印象があります。

今回はPlaywrightにパッチを適用し、検出されないバージョンである Patchright というライブラリをご紹介します。

GitHub
GitHub - Kaliiiiiiiiii-Vinyzu/patchright: Undetected version of the Playwright testing and automatio... Undetected version of the Playwright testing and automation library. - Kaliiiiiiiiii-Vinyzu/patchright

PatchrightはPlaywrightの代替としてそのまま使用できるため、置き換えも簡単です。

※ただし、PatchrightはChromiumベースのブラウザのみの対応となっており、 FirefoxとWebkitはサポートされていないため予めご了承ください。

Patchrightのインストール方法

Patchwrightは pip により、以下のコマンドでインストール可能です。

pip install patchright

Patchwrightのインストールが完了したら、以下コマンドでブラウザをインストールしましょう。

patchright install chromium

Patchrightの実行

実行するコードは以下の通りです。

import os

from patchright.sync_api import sync_playwright

user_data_dir = "./chrome_data"

# フォルダが無ければ作成
os.makedirs(user_data_dir, exist_ok=True)

with sync_playwright() as playwright:
    browser = playwright.chromium.launch_persistent_context(
        user_data_dir=user_data_dir,
        channel="chrome",
        headless=False,
        no_viewport=True,
    )

    page = browser.pages[0] if browser.pages else browser.new_page()
    page.goto("https://bot-detector.rebrowser.net/")

    input("終了するにはEnterキーを押してください: ")

    browser.close()

開くページはBot検知のテストサイトとなります。

上記スクリプトでは、スクリプトの実行ディレクトリにChromeのプロファイルのためのディレクトリ(ユーザーデータディレクトリ)を作成していますが、これにより更にBot検知され辛くなります。

Patchrightのドキュメントでも、検知を避けたい際のベストプラクティスとして以下指定が推奨されています。

playwright.chromium.launch_persistent_context(
    user_data_dir="...",
    channel="chrome",
    headless=False,
    no_viewport=True,
    # do NOT add custom browser headers or user_agent
    ...
)

ユーザーディレクトリを利用すると、例えばログイン時にBot判定が動くサイトについては、予め指定のプロファイルを利用して手動でログインを行っておけば、一定期間ログインを回避してスクレイピングを行うこともできます。

例えば普段使っているブラウザでX(旧 Twitter)にログインしている人は、Xにアクセスする度に毎回ログインをしている訳では無いかと思います。そのようなイメージです。

先程作成したプログラムは以下で実行可能です。

python test.py

実行されるとブラウザが立ち上がり、Bot検知のテストサイトに接続されます。

結果は上々で、これであればBot判定される機会はグッと減る印象です。

Bot検知のテストサイトの結果

最後に

今回はPlaywrightにBot検出回避のためにパッチを当てたPatchrightをご紹介しました。

参考になりましたら幸いです。

冒頭でも述べた通り、スクレイピングや自動化は対象サイトに大きな負荷がかからないよう最大限の配慮を行う必要がありますので、注意しながら行って下さい。

ご依頼について

NeeNetではSeleniumやPlaywrightを利用したスクレイピングや、Web作業の自動化に関するご依頼・ご相談をお引き受けしております。

個人・法人問わず、何かご相談事項がございましたら、一度ご連絡いただければと思います。

  • URLをコピーしました!