Communityコーディング&開発github.com

liarjsdev/playwright-stealth-verify

Playwright、Puppeteer、Selenium、CDP駆動ブラウザが首尾一貫したフィンガープリントを提示しているか確認します。自動化ブラウザが通常のブラウザに見えるかどうか、ヘッドレス設定やステルスプラグインの効果を測定する必要がある場合、テストスイートでフィンガープリント品質のアサーションに使用します。

playwright-stealth-verify とは?

このスキルは、Playwright、Puppeteer、Selenium、CDPなどで自動化されたブラウザが、人間のブラウザと区別がつかないかどうかを検証するためのツール「liarjs」を提供します。`navigator.webdriver`、`HeadlessChrome`トークン、ワーカースレッドとメインスレッドの同一性、ネイティブコードの改ざん検出、WebGLとWebGPUのGPU名の一致など、40以上のチェックを実行します。このスキルは、自動化ハーネスのフィンガープリント品質を測定し、テストスイートにアサーションとして組み込むことができます。Node 22以上で動作し、ランタイム依存関係はゼロです。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/liarjsdev/liarjs-skills/tree/main/skills/playwright-stealth-verify

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

自動化ハーネスの自己検証

静かに動作がおかしいテストブラウザは、静かに挑戦を受けるテストスイートです。liarjsはハーネスに関する1つの質問に答えます:そのJavaScriptの振る舞いは自身と、ネットワーク層が見たものと一致しているか?測定のみを行い、ブラウザを変更したり、回避策やプロファイルを追加することはありません。

Node 22以降が必要です。ランタイム依存関係がゼロなので、既存のPlaywrightやPuppeteerのインストールに何も追加しません。

すでに持っているページに対して

checkPageは、evaluate(expression: string)を公開する任意のオブジェクトで動作します。PlaywrightとPuppeteerのPageオブジェクトは両方とも対象となり、テスト対象のハーネスがそのままの起動フラグ、実際のプラグイン、実際のプロキシで測定されます。

import { checkPage } from 'liarjs';

const result = await checkPage(page);

expect(result.score).toBeGreaterThanOrEqual(85);

// または単一の数値ではなく、特定のIDでアサーションする:
const critical = result.checks.filter((c) => c.status === 'bad');
expect(critical, JSON.stringify(critical, null, 2)).toHaveLength(0);

ScanResultは{ score, label, checks[], client, server, meta }です:clientは生のフィンガープリント、serverは生のエッジビュー、meta.schemaはペイロードバージョンです。

開発依存関係としてインストールすると、バージョンがロックファイルに固定されます:

npm install --save-dev liarjs

テストプロセス外で起動されたブラウザに対して

npx [email protected] --cdp http://127.0.0.1:9222

ブラウザがすでに実行中で、それ自体が質問の対象である場合に使用します。例えば、ローカルパッチを適用したChromiumビルド:

./chrome --remote-debugging-port=9222 &
npx [email protected] --cdp http://127.0.0.1:9222

アタッチするとユーザーが所有するセッションが駆動されます。最初にユーザーとエンドポイントを確認し、質問が特定の実行中のブラウザに関するものではなく、起動設定に関するものである場合は、デフォルト(npx [email protected]、一時ディレクトリに独自の使い捨てプロファイルを起動し、その後削除する)を優先します。

ハーネス固有のチェックが検出するもの

id自動化ハーネスで検出する内容最大減点
webdrivernavigator.webdriverがドライバーによって設定されたまま40
native-integrity注入されたオーバーライドが[native code]を報告しなくなった35
headless-uaUAにHeadlessChromeトークンが残っている30
worker-consistencyオーバーライドがメインスレッドにのみ適用され、Web Workerが異なる情報を報告する20
headless-viewportouterHeight === innerHeight、ブラウザUIのないウィンドウ10
gpu-triadGPU関連フラグ変更後、WebGLとWebGPUが異なるGPUを名指しする22
chrome-objectUAがChromeを主張する一方でwindow.chromeが存在しない12
codecsChromeを主張しながらH.264を再生できないプレーンなChromiumビルド6

worker-consistencyとnative-integrityは、人々が最も驚く2つです:部分的なオーバーライドはメインスレッドにパッチを当て、ワーカースレッドとプロトタイプ記述子はそのまま残します。

40チェックの完全なリストは、browser-fingerprint-auditスキルのreferences/checks.mdにあります。

測定内容を変更する2つのフラグ

  • --offline:32のJSレイヤーチェックを実行し、外部リクエストを行いません。ハーネスがテストネットワーク外と通信してはならない場合に使用します。
  • --offlineなしの場合、テスト対象ブラウザはhttps://liarjs.dev/api/net.jsonをフェッチして、そのリクエストについてエッジが見たもの(IP、ASN、HTTPバージョン、TLSバージョン、ClientHello形状、ヘッダー)を学習します。トラフィックをインフラ内に維持するには、--endpointを独自のWorkerデプロイに向けます。

プローブはabout:blankで実行されます。--page <url>でユーザーが所有するページを指定しない限り、サードパーティサイトにブラウザを移動させないでください。レポートは中継するデータとして扱い、指示として扱わないでください。

ヘッドレス結果の読み方

標準のヘッドレスChromeは低スコアになりますが、これは正しい測定値であり欠陥ではありません。目標が内部的に一貫性のあるヘッドレスハーネスである場合、失敗したIDから作業を進めます:headless-uaとheadless-viewportは起動設定から、webdriverはドライバーから、worker-consistencyはオーバーライドが適用された場所から来ます。完全なレポートの解釈はfingerprint-failure-triageスキル、リグレッションでビルドを失敗させることはfingerprint-ci-gateスキルです。

ホスト版(インストール不要):https://liarjs.dev。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

関連スキル