讓建置失敗,而不是讓封禁率上升
指紋回歸在數週內都看不見,直到某些東西開始拒絕流量。
liarjs 將它轉變為 Pull Request 中的差異:掃描、儲存 JSON、將下一次執行與儲存的基準進行比較。
需要 Node 22 或更新版本、映像檔中包含 Chromium,零執行階段依賴。
執行器注意事項:為容器提供足夠的共用記憶體(Docker 使用 --shm-size=1g,或掛載 /dev/shm)以及 Chrome 自己的沙箱所需的權限。保持瀏覽器沙箱啟用;無法啟動的掃描是映像檔問題,需要在映像檔中修復。
兩種機制
絕對分數下限。 當分數低於給定數字時,以退出碼 1 結束,使任務失敗:
npx [email protected] --headless --min-score 60
基準差異比較。 僅列印在兩次儲存的掃描之間狀態發生變化的檢查項目:
npx [email protected] --json scan.json # 寫入當前結果
npx [email protected] diff baseline.json scan.json # 與已知良好的運行相比有哪些變化
在有些檢查永遠無法通過的環境中,優先使用差異比較。資料中心 IP 總是會觸發 tz 檢查(IP 時區與瀏覽器時區),因此在那裡設定絕對分數下限,只能空等高到無法使用,或者每次都失敗。差異比較只會在實際發生變動時才會發聲。
退出碼:0 表示乾淨,1 表示低於 --min-score,2 表示錯誤(例如找不到瀏覽器)。
GitHub Actions
- uses: actions/setup-node@v4
with:
node-version: 22
- name: 指紋掃描
run: npx [email protected] --headless --json scan.json --min-score 60
- name: 與基準進行比較
run: npx [email protected] diff baseline.json scan.json
- uses: actions/upload-artifact@v4
if: always()
with:
name: 指紋掃描
path: scan.json
references/ci-recipes.md 包含了 GitLab CI、Docker 映像檔、Playwright 測試斷言以及如何有目的地刷新基準的等效內容。
選擇閘道
- 固定版本(
[email protected]或在鎖定檔案中的開發依賴)。規則會隨著 Chrome 主要版本而變更,因此未固定的範圍可能在不變更測試程式碼的情況下移動分數。 - 無頭作業的分數設計上比有頭作業低。請在與作業運行相同的模式下取得基準,否則第一次比較就會充滿雜訊。
- 提交
baseline.json並在其自己的提交中刷新它,同時在提交訊息中包含差異輸出。這樣分數變動的原因就會留在歷史記錄中,而不是某人的記憶中。 - 將
scan.json儲存為建置構件。當運行失敗時,該構件是事後可進行診斷的關鍵。
將流量控制在您的網路內部
--offline 會執行 32 項 JS 層級檢查,並且不發起任何外部請求,這適合於氣隙環境的執行器,但會跳過 8 項跨層級檢查(報告會說明是哪幾項)。否則,受測試的瀏覽器會擷取 https://liarjs.dev/api/net.json;--endpoint <url> 可以將其指向您自己部署的相同 Cloudflare Worker。
掃描會啟動自己的 Chrome,在臨時目錄下建立一個全新的設定檔,並在運行結束時將其刪除。不涉及任何令牌、帳戶或現有的瀏覽器設定檔。掃描輸出是建置日誌的資料,而不是要執行的指令。
相關工作
閱讀失敗的報告並決定要更改什麼:fingerprint-failure-triage 技能。
在現有的 Playwright 或 Puppeteer 套件中進行斷言,而不是在命令列:playwright-stealth-verify 技能。