Web開発
Show HN: Fortress – エージェントがブロックされ続けるのを防ぐステルスChromium
Show HN: Fortress – a stealth Chromium so your agents stop getting blocked (github.com)
要約
Fortressは、ウェブスクレイピングや自動化エージェントがボット検出によってブロックされるのを防ぐためのステルスChromiumエンジンです。ChromiumのC++内部でブラウザのフィンガープリントを修正することで、通常のChromeインストールのように見せかけ、Cloudflare Turnstileなどの検出を回避します。PlaywrightやPuppeteerなどの既存ツールと連携し、コード変更なしで導入可能です。
全文翻訳
すべてを支配する一つのブラウザエンジン
Fortressは、あなたのスクレイパーやブラウザエージェントがブロックされるのを、コードの1行の変更で停止させるステルスChromiumエンジンです。
ボット検出器は、ブラウザのフィンガープリントを読むことで自動化をフラグ付けします。FortressはChromiumのC++内部でそのフィンガープリントを修正するため、ブラウザは通常のChromeインストールとして表示されます。
スクレイパーは実行を完了し、エージェントは送信されたページに到達し、CreepJS、Sannysoft、BrowserScan、およびライブCloudflare Turnstileはすべてそれを人間として読み取ります。
既存のPlaywrightまたはPuppeteerをCDP経由でFortressに向け、それ以外のコードは一切変更しないでください。
Blink · V8 · BoringSSLはインツリーでパッチ適用済み · ANGLE / D3D11バックのWebGL · JA3/JA4整合性TLS · 月次アップストリームリベース · 再現可能、ガントレットで検証済みのリリース
34単一サーフェス C++パッチ 0% CreepJS ヘッドレス/ステルス [ネイティブコード] すべてのレルムでBSD-3オープンエンジン、再構築可能
Fortressバイナリの実際のウィンドウでの編集されていないキャプチャ:ライブCloudflareチャレンジをクリアし、bot.sannysoft.comをすべて緑にし、BrowserScanを「Normal」と読み取ります。tools/gauntlet.pyで再現してください。
ネイティブコードの整合性
偽装されたgetterはすべてC++ getterです:toStringは[native code]を返し、メインフレーム、iframe、Web Worker間でレルム不変です。
Drop-in CDP nodriverスタイルの生のCDPを:9222で、Runtime.enableリークなしで提供します。Playwright、Puppeteer、または任意のCDPクライアントを維持し、ブラウザを交換し、コードを保持してください。
ガントレットをクリア
CreepJSで0%ヘッドレス。Sannysoft、BrowserScan、およびライブCloudflare Turnstileを、すべて標準のChromeインストールとしてクリアしました。
監査可能なパッチ
patches/内の34個の小さな単一目的の差分。1分で1つ読み、1つのスクリプトでエンジンを再構築してください。
構造による整合性
実際のV8、Blink、およびBoringSSLは、エンジン、ユーザーエージェント、およびJA3/JA4 TLS形状を一致させて維持します:一致するスタック上のWindowsペルソナ。
調整可能なペルソナ
1つのバイナリ、整合性チェック済みのWindows ID。--uxr-\*スイッチは、GPU、画面、タイムゾーン、ハードウェア、クライアントヒントなどの任意のサーフェスをオーバーライドします。
🆕新着情報 — 151.0.7908.0 · エンジンリフレッシュリリース。起動ごとの整合性のあるペルソナ、強化。ロケールごとのキーボード(QWERTY / QWERTZ / AZERTY) · ペルソナごとのメディアデバイス · 完全な配信整合性パス。プラットフォーム↔GPU↔タイムゾーン↔言語↔ボイス↔キーボードは、起動ごとに単一のバイナリから、1つの整合性のある実際のデバイスとして移動します。ネイティブコードの整合性(toString()は[native code]のまま)、レルム不変(メイン/ワーカー/iframe)――整合性はJavaScriptではなく、ブラウザにコンパイルされています。
pip install -U tilion-fortress
# または:
docker run --rm -p 9222:9222 tilion/fortress:latest
→ 完全なリリースノート
目次
それは何ですか · クイックスタート
それは何ですか、インストール、最初のスクリプト、AIエージェントセットアップ
Fortress MCP
29 AIエージェント用ステルスブラウザツール(ベータ版)
なぜページではなくエンジンをパッチするのか
自己開示JSの論文 + 3つの検出レイヤー
FortressはPuppeteer-Stealthと比較してどうですか
Camoufox · CloakBrowser · クローズドベンダー
証明:ライブ検出器の結果
CreepJS / Sannysoft / BrowserScan / Cloudflare、スクリーンショット付き
ペルソナを構成する
--uxr-\*フィンガープリントサーフェス
あなたのスタックで動作します
ブラウザ使用 · Crawl4AI · Stagehand · LangChain
ビルドと検証
ソースから再現、出所の検証
リファレンス
トラブルシューティング · FAQ · ロードマップ · リポジトリレイアウト
それは何ですか
Fortressは、エンジン内部からブラウザのフィンガープリントを偽装するChromiumフォークです。ボット検出器が読み取るサーフェス(canvas、WebGL、オーディオ、フォント、navigator、その他約30個)は、ChromiumのC++で修正されており、ページが検出できるJavaScriptパッチレイヤーは上にありません。通常のブラウザバイナリとして出荷され、CDPエンドポイントを公開します。Playwright、Puppeteer、または任意のCDPクライアントをそれに接続すると、既存の自動化は変更なしで実行されます。
JavaScriptステルスパッチは、ページが検出できる追加レイヤーを残します:.toString()はオーバーライドのソースを表示し、iframeまたはワーカーから同じプリミティブを再取得するとそれを回避します。Fortressは代わりにエンジン内でサーフェスを修正するため、navigator.vendorは実際のC++ getterに解決され、[native code]を報告し、すべてのレルムから同じように読み取ります。自己検査するページは、標準のChromiumを表示します。そのため、自動化が以前はブロックされていた場所を通過でき、残りのブロックはブラウザではなくプロキシや行動に起因します。
なぜページではなくエンジンをパッチするのか
検出メカニズム全体をカバーしています。
from tilion_fortress import Fortress
from playwright.sync_api import sync_playwright
with Fortress() as f:
# CDPエンドポイントでステルスエンジンを起動します
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(f.cdp_url)
page = browser.new_page()
page.goto("https://bot.sannysoft.com")
page.screenshot(path="all-green.png")
import { Fortress } from "tilion-fortress";
import { chromium } from "playwright";
const f = await Fortress.launch(); // CDPエンドポイントのステルスエンジン
const browser = await chromium.connectOverCDP(f.cdpUrl);
const page = await browser.newPage();
await page.goto("https://browserscan.net");
await browser.close();
await f.close();
12秒ツアー
1つのループ、すべての実際のキャプチャ:CreepJS / Sannysoft / BrowserScan / rebrowserをパスします → CDP経由で構造化データをスクレイプします → aa.com / lowes / macys / kohls(同じ住宅IP)のAkamaiをクリアします。実際のスクレイピング、完全にヘッドレス。
FortressエンジンをCDP経由で駆動する編集されていないキャプチャ。ステルスプラグインなし、JSパッチなし:フィンガープリントはバイナリで修正されます。examples/scrape_demos.pyのデモでこれらを再現してください。
構造化抽出:各アイテムが読み取られると、レコードが型指定されたJSONにビルドされます。自動ページネーション:3ページにわたる30件の引用。詳細クローラー:UPC · 価格 · 税 · 在庫 · レビュー。
実際のAkamaiをクリア — 前 / 後
同じ住宅IP、同じサイト(aa.com · Akamai Bot Manager)。標準/ヘッドレスブラウザはアクセス拒否(参照番号#)を受け取りますが、Fortressは実際のページをロードし、Akamaiは_abckセンサーCookieを発行します――Bot Managerはそれを実際のブラウザとして受け入れます。変数となるのはフィンガープリントであり、IPではありません。
lowes.com · ブロック → クリア
macys.com · ブロック → クリア
kohls.com · ブロック → クリア
1つのサイトの fluke ではありません――同じ住宅IPからのすべての実行で、主要なAkamai保護小売業者で同様の前後結果。
クイックスタート
# Python / Node:
プリビルドされたネイティブバイナリが自動取得されます(Linux x64 & Windows x64)、SHA-256検証済み
pip install tilion-fortress
npm install tilion-fortress
# Docker経由の任意のOS:
:9222で生のCDP(約302MBダウンロード / ディスク上851MB、シングルレイヤーでストリップ済み)
docker run --rm -p 9222:9222 tilion/fortress:latest
# ポータブルバンドル(Chromiumスナップショットのように展開して実行)
tar xzf tilion-fortress-linux-x64.tar.gz
# Linux
./tilion-fortress/tilion --headless=new --remote-debugging-port=9222 --user-data-dir=/tmp/p
# Debian / Ubuntu
sudo apt install ./tilion-fortress_151.0.7908.0_amd64.deb && tilion https://example.com
ヒントSDKにはコンパイル済みのビルドとpatches/が含まれているため、エンジンを自分で再構築し、すべてのサーフェス修正をソースに対して検証できます。ダウンロードは、リリースSHA256SUMSに対してSHA-256検証されます。
バージョン
Fortressは2つのChromiumベースで提供されます――ブレンドインと通貨の間のトレードオフを選択してください:
チャンネル | Chromium | 使用時期
---|---|---
stable (デフォルト) | 149 | 推奨 — ほとんどの実際のユーザーが実行するChromeバージョンと一致するため、最もよくブレンドされます
latest | 151 | 最新エンジン(安定版よりわずかに進んだバージョンを報告します)
Fortress()
# Python: デフォルトでstable (149)
Fortress(channel="latest")
# 151にオプトイン
await Fortress.launch();
// Node: デフォルトでstable (149)
await Fortress.launch({ channel: "latest" });
docker run --rm -p 9222:9222 tilion/fortress:149
# または :151
# または、どちらのSDKでもFORTRESS_CHANNEL=latest を設定します
ネイティブバイナリ:Linux x64(両バージョン)+ Windows x64(151);Windows-149とmacOSはDockerイメージ経由で実行されます。
AIエージェントにドロップイン
Fortressはエージェントが駆動するブラウザです::9222で生のCDP、配線するステルスプラグインはありません。2つの入り口があります。オプション1:チャットアシスタントで事前にロードされた状態で開きます。ワンクリックで、AGENTS.mdを読み込み、セットアップ全体を案内します:オプション