同意橫幅
Fetch 如何在萃取前嘗試關閉 Cookie 同意橫幅、哪些東西不碰,以及結果如何回報。
這是萃取品質的前置條件,不是瀏覽器操作功能。許多同意管理平台在同意之後才載入正文,只移除遮罩會拿到空殼。
三階段
內嵌的 consent.js 在等待穩定後執行,任一階段有動作即停:
- 已知平台選擇器:OneTrust、Cookiebot、Didomi、Usercentrics、Quantcast、Sourcepoint、Osano、TrustArc、CookieYes、Complianz、HubSpot、cookieconsent 的穩定 id 與 data 屬性,搜尋範圍含文件與所有 open shadow root
- 遮罩內的同意字樣:先定位阻擋層,再在其中找按鈕、連結或送出鈕,標籤含中英日韓同意字樣且不含拒絕、管理、設定類字樣;超過 40 字元的標籤忽略
- 降級移除:移除阻擋層,並清除
html與body的overflow、position、height以還原捲動
什麼算阻擋層
需同時滿足:
| 條件 | 細節 |
|---|---|
| 定位 | position 為 fixed 或 sticky 且可見 |
| 尺寸 | 覆蓋視窗 5% 以上,或捲動被鎖且 z-index ≥ 1000 |
| 位置 | 不在 header 或 nav 之內 |
| 詞彙 | 文字含 cookie、consent、privacy、GDPR、tracking、隱私、同意等詞 |
依 z-index、再依面積只取前三個候選。詞彙閘是必要的:只看版面特徵會把一般的 sticky 容器當成遮罩並刪除真正的內容。shadow root 走訪在 4000 個元素後停止。
登入牆與付費牆
文字含 sign in、log in、subscribe、register、登入、訂閱且無同意字樣的阻擋層屬於閘門,不是同意橫幅。閘門回報 skipped,不點也不移除。
輪次與回報
最多執行兩輪,有動作的那輪結束後會再等待穩定,因為有些平台點完第一層才出現第二層。點過的元素標上 data-gb-consent,第二輪不會再點同一個控制項。
Result.Consent |
意義 |
|---|---|
selector |
點了已知平台的按鈕 |
text |
依標籤找到同意按鈕並點擊 |
removed |
移除了阻擋層 |
none |
沒有找到同意層 |
skipped |
找到登入牆或付費牆,未處理 |
| 空字串 | 腳本執行失敗,或結果為 JSON/XML 文件 |
多輪結果以逗號串接,例如 selector,text。
已知邊界
- iframe 內渲染的同意平台不處理:頂層文件讀不到其文字,因此判定為不命中而放行,不會誤動頁面
- 只是嘗試,不保證成功;內容看起來是空的時檢查
Result.Consent