認識 cdp.page.enable() 的差異

從結論上來講,啟用 page.enable() 很難被反爬蟲檢測到。

下面文章分三個方向:

  • 執行 await tab.send(cdp.page.enable()) 與不執行的差異
  • 執行後 Chrome/頁面端會不會被「檢測出來」
  • 有哪些可被網站偵測到的指標(有、沒有 enable 各不同)


Page.enable() 做了什麼?

Page.enable() 的作用很簡單:

告訴 Chrome:「我開始關心 Page 這個 domain 的事件,請把所有 Page 相關事件傳回給我」。

如果沒有呼叫:

  • CDP 一般還是能操作(例如 Page.navigate()
  • Chrome 不會主動推送事件
  • 例如:
    • Page.javascriptDialogOpening
    • Page.loadEventFired
    • Page.frameNavigated
    • Page.domContentEventFired
    • Page.screencastFrame
    • …等等

所以:

功能未呼叫 Page.enable()呼叫後
發送命令(navigate、screenshot…)可用可用
自動收到頁面事件❌ 不會✔ Chrome 會開始推送
能否攔截 alert❌ 幾乎不行(沒事件)✔ 可靠 javascriptDialogOpening 攔截
能否監聽 DOM、frame、載入狀態❌ 不會收到✔ 可監聽

② 「是否會被網站偵測到?」

結論

沒有,網站端無法偵測你有沒有呼叫 Page.enable()

原因:

  • Page.enable()Chrome 內部與 DevTools 的溝通
  • 不會修改 JS 執行環境
  • 沒有任何標誌留在 window 或 DOM

③ 那網站能偵測到「哪些特徵」?

雖然網站偵測不到 Page.enable() 本身,但:

只要你啟動了 CDP 就能被某些指標「間接」偵測到,而不是因為 Page.enable()

以下是 Chrome 在開啟 DevTools 或以 CDP 附著時最常見的偵測方式:


(A) navigator.webdriver === true

如果你不是以「正常使用者」啟動 Chrome,而是:

  • --remote-debugging-port
  • --headless=new
  • 自動化環境

大多情況:

navigator.webdriver
// true

這是 最常見的 Bot 偵測方式
但與 Page.enable() 無關


(B) chrome.runtime / CDP 擴展檢測

部分站點會檢查:

window.chrome
window.chrome.runtime

但仍然與 Page.enable() 無關,你所使用的 CDP 可能會產生 .runtime。


(C) Performance Fingerprint(DevTools Overhead)

假如你掛著 CDP session:

  • Chrome DevTools Agent engine 會跑
  • Performance timing 可能變化
  • 網站可以「偵測延遲異常」
    例如:
performance.now()

但依然 不是 Page.enable() 導致,而是整個 CDP 存在造成


(D) 棧追蹤指紋(極少見)

某些反爬蟲網站會檢查:

  • alert.toString()
  • console.log.toString()

如果你覆寫了 API(如前面你覆寫 alert),就會查出:

alert.toString()
// "function (){}"   <-- 異常

但:

只要你覆寫 JS(alert / console / prototype),就會被發現,跟 Page.enable() 無關。


(E) 是否有 detached DevTools(Chrome 自己偵測)

Chrome 自己有事件:

  • Inspector.detached
  • Target.attachedToTarget

chrome:// 層能知道有沒有 DevTools 附著:
但:

  • 網站 JS 必須突破瀏覽器沙盒才能接觸到
  • 所以正常網頁 抓不到

④ 有無 Page.enable() 的實際異差總表

功能/行為沒有 Page.enable有 Page.enable
可否收 Page 事件(alert、frame、load)❌ 不會收到✔ 會開始自動推送
是否能靠事件攔截 alert❌ 幾乎不行✔ 可直接攔截
是否被網站檢測到❌ 不會❌ 不會
是否讓 CDP overhead 略上升少量(極低)
是否會讓 runtime footprint 改變幾乎無

核心重點:

Page.enable() 本身不會多產生可被 JS 偵測的痕跡。

真正能被網站抓到的:

  • navigator.webdriver
  • JS override(你自己動了 alert
  • 指紋差異(DevTools 附著/CDP session 帶來的 timing 變化)

但這些都不是 Page.enable() 的結果,而是 使用 CDP 本身的副作用


⑤ 如果你希望「不被任何 JS 偵測」又能攔截 alert?

最乾淨的做法:

Chrome啟動參數:禁止彈窗

--disable-javascript-dialogs

在這種情況:

  • alert/confirm/prompt 永遠不會彈
  • CDP 不需要 Page.enable
  • JS 裡面仍會執行 alert(),但什麼都不會發生
  • 幾乎無法被網站端偵測

這是 完美隱形、最安全且最可靠 的方式。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *