見出し画像

Playwright × Anti-Detection でブラウザ自動化【プロンプト全公開】

はじめに:ある日、全てのスクレイピングが止まった



画像

……マジか。

2024年11月のある朝、僕は自分のPCの前で絶句していた。

昨日まで完璧に動いていたスクレイピングスクリプトが、全部エラーを吐いている。何が起きたのか全くわからない。コードは一行も変えていない。なのに、全てのサイトで「Access Denied」「403 Forbidden」「Bot検出されました」のメッセージが並んでいる。

スマホ119の競合調査で使っていた価格チェックBot、NextCodeのアプリ開発で使っていた画像収集スクリプト、meishi.digitalのリード獲得用のLinkedInスクレイパー。全部死んだ。

これ、ヤバいやつだ。

僕は工業高校時代からプログラミングをやっているけど、「Webスクレイピング」は昔からグレーゾーンだった。技術的には可能だけど、サイト側からすれば「勝手にデータを持って行かれる」わけで、歓迎されない。でも、ビジネスをやっていると「競合の価格を毎日チェックしたい」「市場データを自動で集めたい」みたいなニーズはどうしても出てくる。

スマホ119を8店舗展開している今、競合の修理価格を手動でチェックするなんて無理だ。月3,000件の修理をこなしながら、毎日10店舗のWebサイトを開いて価格表をExcelに打ち込む?そんな時間あるわけない。

だから、自動化していた。Pythonで書いたスクレイピングスクリプト。毎朝6時に自動実行されて、競合8社の価格データをスプレッドシートに入れてくれる。このおかげで、僕は「県内最安値」を維持できていた。

でも、それが突然止まった。

原因を調べると、どうやら各サイトが「Bot検出システム」を導入したらしい。Cloudflare、DataDome、PerimeterX……聞いたこともない名前のサービスが、僕のスクリプトを「Bot」と認識してブロックしている。

「ユーザーエージェントを変えれば突破できるんじゃないか?」

そう思って試した。でも、ダメ。ヘッダーを弄っても、Cookieを削除しても、IPを変えても、全部検出される。

……これ、どうやって突破するんだ?

そこから僕の、「Anti-Detection」の戦いが始まった。

第1章:Bot検出の仕組みを理解する



画像

まず、敵を知らないと勝てない。

僕は3日間かけて、「Bot検出システム」がどうやって動いているのかを調べた。スマホ119で培った「修理するにはまず構造を知れ」の精神だ。iPhone の画面を直すにも、内部構造を理解していないと失敗する。同じことだ。

Bot検出の3つの手法


Bot検出システムは、大きく分けて3つの方法で「これはBotだ」と判断している。

**1. ブラウザフィンガープリント**

これがヤバい。マジでヤバい。

たとえ話をします。

あなたが銀行強盗をするとして(やらないけど)、マスクをかぶって顔を隠しても、指紋は残る。歩き方、声のトーン、癖、全部が「あなた」を特定する手がかりになる。

ブラウザも同じ。ユーザーエージェントを偽装しても、Webサイト側は「あなたのブラウザ」を何百種類の特徴から識別している。

  • WebGLレンダラーの情報

  • - インストールされているフォントのリスト

  • - Canvas指紋(HTML5 Canvasで描画したピクセルデータ)

  • - Audio指紋(Web Audio APIの出力)

  • - ブラウザのプラグイン

  • - 画面解像度

  • - タイムゾーン

  • - 言語設定

  • - バッテリー情報

  • - ハードウェアコンカレンシー(CPUのコア数)

これ全部を組み合わせると、99.9%の精度であなたのブラウザを一意に識別できる

僕が使っていたPuppeteerは、これらの情報が「ヘッドレスブラウザ特有の値」になっていた。つまり、サイト側から見たら「こいつ明らかにBotだよね」とバレバレだったわけだ。

**2. 行動パターン解析**

人間は不規則に動く。マウスの軌道は曲線を描くし、クリックするまでに0.3秒くらい迷う。スクロールも「ヌルッ」と慣性がある。

でも、Botは違う。

  • マウスが直線移動する

  • - クリックが瞬時(0.001秒)

  • - スクロールが等速(人間は加減速する)

  • - ページ読み込みから0.1秒で次のアクションを起こす

これだけで「Bot」と判定される。

僕のスクリプトは、ページを開いた瞬間に `document.querySelector()` で要素を取得していた。人間なら最低でも1秒は「読む時間」があるはずなのに、0.05秒で次のページに飛ぶ。そりゃバレるよね。

**3. IPレピュテーション**

「このIPアドレス、怪しくない?」というデータベースがある。AWSのIPアドレスとか、VPNのIPアドレスとか、短時間に大量アクセスしているIPとか、全部記録されている。

僕はAWSのEC2でスクリプトを動かしていた。これがまずかった。AWSのIPは「データセンターIP」として知られているから、それだけで疑われる。

Bot検出の進化スピードがヤバい


2023年までは、ユーザーエージェントを変えるだけで突破できた。

2024年前半は、Headless Chromeの `--disable-blink-features=AutomationControlled` フラグを立てれば大丈夫だった。

でも、2024年後半から、Cloudflareが「Turnstile」というBot検出システムを導入して、もう何やってもダメになった。

ぶっちゃけ、「イタチごっこ」なんだけど、サイト側の防御が圧倒的に強くなっている。個人開発者が対抗するのは、もう無理ゲーに近い。

……そう思っていた。PlaywrightとAnti-Detectionに出会うまでは。

ここから先は

25,552字 / 8画像

¥ 1,980

この記事が気に入ったらチップで応援してみませんか?

購入者のコメント

コメントするには、 ログイン または 会員登録 をお願いします。
Playwright × Anti-Detection でブラウザ自動化【プロンプト全公開】|HIROKI
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1