4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【完全敗北】最強Bot判定サイトに挑んだらコンプライアンスで門前払いされたので、代わりにCloudflare武装サイトを「無双」した話

Posted at

はじめに:なぜ「最強」を目指したのか

普段はセキュリティやインフラを触っている高校生エンジニアです。
Webスクレイピングは「いたちごっこ」の世界です。Seleniumで挑んではWAFに弾かれ、Headless Chromeの設定をいじってはまた弾かれる。

そんな消耗戦に終止符を打つべく、「世界最強」と名高いBright DataのScraping Browser を試してみることにしました。
目標は一つ。「ブラウザ指紋(Fingerprint)を完璧に偽装し、どんなBot判定も突破する」 こと。

結論:この差を見よ

百聞は一見にしかず。まずは、私の検証結果をご覧ください。

検証ターゲット 標準Selenium Bright Data
Mercari (Akamai) ❌ 失敗 (Access Denied) ✅ 成功 (100%)
Cloudflare保護サイト ❌ 失敗 (Loop/Block) ✅ 成功 (100%)
Bot判定 (CreepJS) ❌ 失敗 (Score: 0) ⛔️ 規制 (コンプライアンス)

Scraping_Success_Rate_Comparison.png

標準のSeleniumが全滅するような高難易度サイトでも、Bright Dataは涼しい顔で成功率100%を叩き出しました。
しかし、そこに至るまでには予想外の「門前払い」がありました。


第1章:出鼻をくじかれた「最強の壁」

まず挑んだのは、業界で最も判定が厳しいとされるBot診断サイト CreepJS
ここを突破できれば、理論上あらゆるサイトを攻略可能です。

意気揚々とコードを実行した私を待っていたのは、予想外のエラーでした。

selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: 
{"code":"brul","message":"Requested URL (https://abrahamjuliot.github.io/creepjs/) is restricted by compliance rules. 
Ask your account manager to get full access for targeting this site (brul)"}

「コンプライアンスルールによりアクセス制限」

技術的な敗北ではありません。Bright Dataの倫理規定(コンプライアンス)があまりにしっかりしすぎていて、ハッキングツールや診断系サイトへのアクセスがデフォルトで遮断されていたのです。

「怪しいサイトへの攻撃には使わせない」。
このエラーを見た瞬間、逆に信頼できると感じました。無法者のためのツールではなく、まともなビジネスのためのインフラなのだと。


第2章:ターゲット変更、そして「無双」へ

Bot判定サイトが駄目なら、「現実にBot対策ガチガチのサイト」 で検証するしかありません。
ターゲットは以下の2つ。

  1. Mercari (jp.mercari.com): 日本最大級のフリマサイト。Bot対策は非常に強力。
  2. tp-li.com (自作サイト): Cloudflare Turnstileで保護された、私のポートフォリオサイト。

アーキテクチャ

今回構築したシステムは以下の通りです。

System_Architecture_&_Flow.png

実装コード(Python + Selenium)

驚くべきことに、ローカルのSeleniumコードをたった4行書き換えるだけで済みました。

#!/usr/bin/env python3
from os import environ
from selenium.webdriver import Remote, ChromeOptions as Options
from selenium.webdriver.chromium.remote_connection import ChromiumRemoteConnection as Connection

# 実際の運用では環境変数などで管理すること
AUTH = environ.get('AUTH', default='USERNAME:PASSWORD')
TARGET_URL = 'https://jp.mercari.com/'

def scrape(url=TARGET_URL):
    print('Connecting to Browser...')
    # ここが魔法の接続先。ローカルではなくBright Dataのブラウザに接続する
    server_addr = f'https://{AUTH}@brd.superproxy.io:9515'
    connection = Connection(server_addr, 'goog', 'chrome')
    driver = Remote(connection, options=Options())
    try:
        print(f'Connected! Navigating to {url}...')
        driver.get(url)
        print('Navigated! Scraping page content...')
        data = driver.page_source
        print(f'Scraped! Length: {len(data)}')
    finally:
        driver.quit()

if __name__ == '__main__':
    scrape()

検証結果1:Mercari

通常、データセンターIPからのアクセスはAkamai等に厳しく制限されますが、Bright Data経由では...

【成功】
以下は取得したHTMLの一部です。トップページのメタタグやリソースが完全に取得できています。

<title>メルカリ - 日本最大のフリマサービス</title>
<meta name="description" content="フリマアプリ「メルカリ」...">
<meta property="og:url" content="https://jp.mercari.com">
...
<script src="https://web-jp-assets-v2.mercdn.net/.../main.js"></script>

CAPTCHAもブロック画面も出ず、一般ユーザーとして完全に認識されました

検証結果2:Cloudflare保護サイト(tp-li.com)

自作のポートフォリオサイトにもアクセス。普段ならCloudflareの「Checking your browser...」が出る場面ですが、ここも突破。

<h1 class="text-4xl md:text-6xl font-bold tracking-tighter">
  <span class="text-foreground">tp</span>
  <span class="text-primary">-</span>
  <span class="text-foreground">li</span>
</h1>
<p class="text-muted-foreground ...">Python Developer & Infra Engineer</p>

裏側でJavaScriptチャレンジが自動処理され、トップページのコンテンツ("Python Developer & Infra Engineer")が綺麗に取得できています。


第3章:なぜ「勝てる」のか?技術的タネ明かし

「プロキシを通すだけでなぜ突破できるのか?」
その秘密は、Bright Dataが提供する Scraping Browser のアーキテクチャにあります。

従来のスクレイピングとの決定的違い

通常のHeadless Chromeと、Bright DataのScraping Browserの違いを図解しました。

Scraping_Browser_Fingerprint_Mechanism.png

  1. 指紋(Fingerprint)のサーバーサイド管理:
    従来のスクレイピングでは、ローカルPCのOSやフォント情報が「指紋」として漏れていました。Bright Dataは、ブラウザ自体をクラウド上で起動し、数千パターンの「完璧な人間」の指紋(Canvas, WebGL, AudioContext)を注入しています。
  2. CDP (Chrome DevTools Protocol) の活用:
    HTTPリクエストを投げるのではなく、WebSocket経由でリモートブラウザを操縦しています。これにより、TLSハンドシェイク(JA3指紋)が「本物のChrome」そのものになります。

navigator.webdriver = false に書き換える」といった小手先の対策レベルではなく、ブラウザの存在そのものをクラウド側で偽装しているため、検知しようがないのです。


第4章:3分で試せる導入手順

「最強なのはわかったけど、お高いんでしょう?設定面倒なんでしょう?」
私もそう思っていましたが、無料トライアルだけで今回の検証は完結しました。手順をメモしておきます。

1. アカウント作成 & ゾーン設定

  1. Bright Data公式サイト からアカウント作成(Googleログイン可)。
  2. 管理画面左メニューの「Proxies & Scraping」→「Scraping Browser」を選択。
  3. ゾーン名を入力して「Add」を押すだけ。

2. 認証情報の取得

作成したゾーンの「Access parameters」を確認します。

  • Host: brd.superproxy.io
  • Username: brd-customer-xxxx-zone-xxxx
  • Password: xxxxxxxx

これらを環境変数に入れるだけで、先ほどのPythonコードが動きます。

3. コスト感

「Pay as you go(従量課金)」プランなら、初期費用ゼロで使った分だけ支払えます。
今回の検証(Mercariや自作サイトへのアクセス数回)でかかった費用は 数セント(数十円) でした。自分でプロキシサーバーを構築・運用する手間を考えれば、実質タダみたいなものです。


まとめ:エンジニアが楽をするための「最強の課金」

「無料でなんとかする」ことに時間を費やすのも勉強になりますが、「月額数ドルでインフラごとお任せする」 ことで、本質的なデータ分析やアプリケーション開発に時間を割けるようになります。

CreepJSには門前払いされましたが、それは「正しい用途に使ってくれ」というBright Dataからのメッセージでした。
Bot判定との不毛な戦いは終わりです。これからは、取得したデータをどう使うかに全力を注げます。

結論:Bright Dataは、技術力だけでなく「時間」を買うツールだった。


[🎁 キャンペーンリンク]
Bright Dataの登録はこちら(Qiitaキャンペーン)

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?