2025-05-12

Selenium Chrome WebDriver 定位 之2

之前在 Selenium Chrome WebDriver 定位 有記錄過 Chrome 模擬定位,但前陣子遇到 CDP 送了定位但沒有用的情況。 

所以我實際使用 Chrome 送一次 CDP command 試試。 

1. 首先,允許網站定位。 
2. 接著在開發者工具中找到 Protocol Monitor(沒有開啟過的話,需要先去 Settings > Experiments > Protocol Monitor 勾選)。 

然後試著在有問題的頁面送 CDP command⋯⋯ 
這時候我發現 Protocol Monitor 有 target 可以選擇;我遇到「送了定位但沒有用」的頁面中有很多 target。

或許是沒有指定時,我 CDP command 沒有送到 main。 

-

看了一下官方文件怎麼指定 target。

1. 先用 Target.getTargets 取得所有 target:
driver.execute_cdp_cmd("Target.getTargets", {})
會得到一個 object。 

2. 拿到你要的 url 的 targetId 之後,attachToTarget 得到 session id:
driver.execute_cdp_cmd("Target.attachToTarget", {
    "targetId": target_id,
    "flatten": True
})
3. 現在就可以送 CDP command 給特定 target 了:
"Emulation.setGeolocationOverride", {
                "latitude": lat,
                "longitude": lng,
                "accuracy": 10,
                "sessionId" : session_id
            }