CloudflareをGoで解決する方法(chromedp + Scrapeless)
Lead Scraping Automation Engineer
TL;DR:
- Cloudflareは訪問者ではなくブラウザを評価します。 指紋の一貫性、行動信号、出口IPを読み取り、信頼できるブラウザに
cf_clearanceクッキーを設定します。したがって、Goでこれをクリアすることは、パズルに答えるのではなく、信頼できるブラウザであることを意味します。 - ローカルのGoブラウザスタックは3つの軸でそのスコアリングに失敗します:
navigator.webdriverの情報、ヘッドレスデフォルトの指紋、データセンターの出口IP。手動で回避策を維持するのは労力がかかります。 - Scrapeless Scraping Browserはレンダリング中にチャレンジをクリアします — 実際に自社開発されたChromium、一貫したセッションごとの指紋、195か国以上の住宅用出口があり、1つのWebSocketエンドポイントを介して到達します。
- あなたのGoは標準のchromedpのままです。
chromedp.NewRemoteAllocatorをScrapelessエンドポイントに向け、ポストチャレンジのコンテンツを待ち、ページを読み取ります — 変更は接続URLだけです。 - 確認済みのライブ: Goのchromedpセッションがクラウドブラウザを介してCloudflareのチャレンジページをクリアし、成功マーカー
You bypassed the Cloudflare challenge! :Dを読み取り、cf_clearanceクッキーを受け取りました。 - 無料で始められます。 新しいScrapelessアカウントには無料のScraping Browserランタイムが含まれています — app.scrapeless.comでサインアップしてください。
はじめに: GoでCloudflareをクリアするのはブラウザの問題です
Cloudflareのチャレンジは、あなたが解読する画像CAPTCHAではありません。バックグラウンドで実行され、ページをロードしたブラウザを評価します — 指紋が内部で一貫しているか、相互作用信号が人間らしいか、出口IPにクリーンな評判があるかどうか。スコアをクリアすると、Cloudflareはcf_clearanceクッキーを設定し、実際のページがロードされます。スコアが通らないと、コンテンツの代わりに中間ページが表示されます。
これにより、Goのタスクが再定義されます。提出する回答はありません — 目標はCloudflareが既に信頼しているブラウザを提示することです。chromedpによって駆動されるローカルのヘッドレスChromiumはその評価をクリアできません:navigator.webdriverプロパティによる自動化の宣言、ヘッドレスデフォルトのフォントとキャンバスの動作を出荷し、評判のサービスが既に知っているIPから外れるからです。自分自身の回避策を維持し、それをChromiumや検出器が変わる中で維持し続けることができます。このガイドは短い道筋を取ります: 通常のレンダリング中に指紋、行動、出口IPがサーバー側で処理されるように、標準のchromedpからScrapeless Scraping Browserを駆動します。
Cloudflareが実際にチェックするもの
Cloudflareの公式ドキュメントは、訪問者を中断することなく実行される検証ステップを説明しています。実際には、以下の3つの項目を評価し、通過するとcf_clearanceクッキーを授与します — 標準のHTTPクッキーです:
| Cloudflareが読み取るもの | ローカルのGoブラウザがそれを失敗する理由 |
|---|---|
| 指紋の一貫性 | ヘッドレスデフォルトとwebdriverフラグが実際のChromeと矛盾する |
| 行動信号 | 一貫性のないブラウザ表面のないスクリプト化されたタイミング |
| 出口IPの評判 | データセンターのIPは住宅用のものよりもスコアが低い |
一貫性のある信頼できるブラウザが、単一の回避策よりも重要です — そのため、3つすべてをサーバー側に移動させることは、手作業のパッチよりも耐久性があります。
なぜScrapeless Scraping Browserなのか
Scrapeless Scraping Browserは、ウェブクローラーやAIエージェント向けに設計されたカスタマイズ可能な検出対策クラウドブラウザです。特にCloudflare向けには、以下を提供します:
- 実際に自社開発されたChromium — ChromeのようにチャレンジJavaScriptを正確に実行し、遅延することなく解決します。
- 一貫したセッションごとの指紋 —
navigator.webdriverの情報はなく、ヘッドレスデフォルトが漏れません。 - 195か国以上の住宅用出口 — Cloudflareは出口IPを評価し、住宅地域はデータセンターのIPが劣るところでもクリーンに読み取られます。
- セッションの持続性 — 同じセッション内で
cf_clearanceの授与をリクエストで再利用できます。 - 1つの接続面 — すべてのオプションは同じWebSocketエンドポイントのクエリパラメーターです。
無料プランでAPIキーを取得するには、app.scrapeless.comにアクセスしてください。
前提条件
- Goツールチェーン (Go 1.21以上)
github.com/chromedp/chromedpとgithub.com/chromedp/cdproto- ScrapelessアカウントとAPIキー — app.scrapeless.comでサインアップしてください。
完全な接続詳細は、Scraping Browser ドキュメント に記載されています。
インストール
chromedp をあなたのモジュールに追加します。リモートブラウザに接続するため、ローカルの Chrome は必要ありません。
bash
go get github.com/chromedp/chromedp
go get github.com/chromedp/cdproto
export SCRAPELESS_API_KEY=your_api_token_here # 無料キーは https://app.scrapeless.com で入手
接続してチャレンジをクリアする
chromedp は NewRemoteAllocator を使ってリモートブラウザに接続します。chromedp.NoModifyURL を使用して Scrapeless エンドポイントを渡し、chromedp が WebSocket URL をそのまま使用するようにします。その後、ポストチャレンジコンテンツを待ちます。チャレンジはレンダリング中に解決されます — 別途解決呼び出しは必要ありません。
注意: これを実行するには、chromedp モジュールがインストールされた Go ツールチェインが必要です。このブロックは Scrapeless クラウドブラウザに対して確認されました; API キーを追加し、
go runで再現してください。
go
package main
import (
"context"
"fmt"
"net/url"
"os"
"time"
"github.com/chromedp/cdproto/network"
"github.com/chromedp/chromedp"
)
func main() {
q := url.Values{}
q.Set("token", os.Getenv("SCRAPELESS_API_KEY"))
q.Set("sessionTTL", "180")
q.Set("proxyCountry", "US")
endpoint := "wss://browser.scrapeless.com/api/v2/browser?" + q.Encode()
target := "https://www.scrapingcourse.com/cloudflare-challenge"
allocCtx, cancel := chromedp.NewRemoteAllocator(context.Background(), endpoint, chromedp.NoModifyURL)
defer cancel()
ctx, cancel2 := chromedp.NewContext(allocCtx)
defer cancel2()
ctx, cancel3 := context.WithTimeout(ctx, 120*time.Second)
defer cancel3()
var cleared string
var cookies []*network.Cookie
err := chromedp.Run(ctx,
chromedp.Navigate(target),
chromedp.WaitVisible("#challenge-title", chromedp.ByID),
chromedp.Text("#challenge-title", &cleared, chromedp.ByID),
chromedp.ActionFunc(func(ctx context.Context) error {
c, err := network.GetCookies().Do(ctx)
cookies = c
return err
}),
)
if err != nil {
fmt.Println("error:", err)
os.Exit(1)
}
hasClearance := false
for _, c := range cookies {
if c.Name == "cf_clearance" {
hasClearance = true
}
}
fmt.Println("cleared:", cleared)
fmt.Println("cf_clearance:", hasClearance)
}
このプログラムの実行結果は cleared: You bypassed the Cloudflare challenge! :D と cf_clearance: true と表示されました — 標準の chromedp で、クラウドブラウザを介して取得されています。
無料プランで API キーを取得してください: app.scrapeless.com
信頼性の高いクリアのために地域を固定する
Cloudflare は出口 IP をスコアリングしますので、proxyCountry を住宅地域に固定してください。任意の ISO 国コードに設定します。W3C WebDriver スペック は、合格した自動化が webdriver フラグを公開することを要求します; クラウドブラウザはそれを持っていないため、クリーンな IP はクリーンなフィンガープリントを伴います。
go
q := url.Values{}
q.Set("token", os.Getenv("SCRAPELESS_API_KEY"))
q.Set("sessionTTL", "180")
q.Set("proxyCountry", "US") // もしくは "DE", "JP", "ANY"
ローカル Go ブラウザの限界
ローカルの chromedp スクレイパーは、Cloudflare がブラウザをスコアリングし始めるまで問題ありません。その後、ヘッドレスフィンガープリント、webdriver フラグ、データセンター IP はそれぞれ異なるチェックに失敗し、インタースティシャルがコンテンツを置き換えます。これらはフィンガープリント、行動、IP の問題です — これをクラウドブラウザがサーバーサイドで処理します。Scrapeless に接続すると、標準の chromedp アクションを維持しながら、管理されたセッションにそれらが引き渡されます。
得られるもの
セッションは通常の chromedp セッションのように振る舞います — Navigate、WaitVisible、Text、および CDP network.GetCookies すべてが機能します。クラウドブラウザを介して Cloudflare をクリアした際のいくつかの誠実な観察結果は以下のとおりです。
navigator.webdriverは存在しないため、Cloudflare が最初に実行するチェックは実際の Chrome のように見えます。- 出口 IP が
proxyCountryと一致する — 住宅地域はデータセンターの IP よりも遥かに信頼性が高いです。 cf_clearanceはパス後に存在する — 同じセッションを再利用して、続くリクエストで許可を持ち越します。- 頑固なページに対してセッションをウォームアップする — 保護されたページの前に、同じセッションでサイトのホームページを最初にロードしてください。そうすることで、行動的な面が通常の訪問のように見えます。
結論: Cloudflare をクリアし、Go を維持する
Clearing CloudflareをGoで行うことは、チャレンジをデコードすることではなく、Cloudflareが信頼するブラウザを提示することです。Scrapeless Scraping Browserは、サーバーサイドでスコアリングされる3つの要素(フィンガープリント、行動、出口IP)を処理するため、あなたのchromedpコードは接続URLのみを変更します。proxyCountryを住宅地域に固定し、ポストチャレンジコンテンツを待機し、cf_clearanceを読み取って通過を確認します。同じクラウドブラウザをPythonで実行する場合は、Scraplingの生産スクリーパーガイドを参照し、Scrapelessの価格ページでプランを比較してください。
Cloudflareクリアリングパイプラインの構築の準備はできましたか?
無料プランを請求し、Cloudflare保護サイトをスクレイピングする開発者とつながるためにコミュニティに参加してください:Discord · Telegram。
app.scrapeless.comにサインアップして、無料のScraping Browserランタイムを取得し、chromedpをレンダリング中にCloudflareをクリアするクラウドブラウザにポイントしてください。
FAQ
Q: 別のCAPTCHA解決サービスは必要ですか?
通過ブラウザでは不要です。Cloudflareは主にフィンガープリント、行動、IPをバックグラウンドでスコアリングし、cf_clearanceクッキーを発行します。クラウドブラウザは通常のレンダリング中にそのスコアリングを通過するように構築されているため、別のパズルステップを接続する必要はありません。
Q: NoModifyURLを使ったNewRemoteAllocatorの理由は?
NewRemoteAllocatorは、起動していないブラウザにchromedpを接続します。NoModifyURLは、chromedpにScrapeless WebSocket URLをそのまま使用するよう指示し、ローカルDevToolsエンドポイントを発見するために書き換えることはありません。
Q: プロキシは必要ですか?
いいえ。住宅型の出口は組み込まれており、proxyCountryを地域またはANYに設定します。Cloudflareは出口IPをスコアリングするため、住宅地域の方がデータセンターの住所よりも信頼性が高くクリアします。
Q: いくつかのページでチャレンジがまだ表示されます—何が助けになりますか?
proxyCountryを住宅地域に固定し、保護されたページの前に同じセッションでサイトのホームページを最初に読み込んでセッションを温め、行動の表面が通常の訪問のように読まれるようにします。
Q: Cloudflareのクリアリングは合法ですか?
公開されているデータへのアクセスは一般的に許可されていますが、ルールは管轄によって異なります。対象のサービス利用規約を確認し、ロボット指令を尊重し、敏感なものについては弁護士に相談してください。
Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。



