以下範例將 cookie 注入到 .google.com,然後第一次 request 就帶 cookie。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# === 測試用 Cookie ===
cookie_list = [
{
"name": "HSID",
"value": "AOyw5em_g-Ed7t70I",
"domain": ".google.com",
"path": "/",
"secure": False,
"httpOnly": False,
},
{
"name": "SSID",
"value": "Ap4P8dfs0-98sdfsdf",
"domain": ".google.com",
"path": "/",
"secure": False,
"httpOnly": False,
}
]
# === 初始化瀏覽器 ===
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")
# 必須:啟動 CDP 才能注入 cookie
driver = webdriver.Chrome(options=options)
# 啟用 Network → 之後才能使用 setCookie
driver.execute_cdp_cmd("Network.enable", {})
# === 利用 CDP 在連線前注入 Cookie ===
for ck in cookie_list:
try:
driver.execute_cdp_cmd(
"Network.setCookie",
{
"name": ck["name"],
"value": ck["value"],
"domain": ck["domain"],
"path": ck["path"],
"secure": ck["secure"],
"httpOnly": ck["httpOnly"]
}
)
print(f"[OK] 已注入 cookie: {ck['name']}")
except Exception as e:
print(f"[ERROR] 無法注入 cookie {ck['name']}: {e}")
# === 第一次連線 → server 會看到我們已設定好的 cookie ===
target_url = "https://www.google.com"
print(f"\n[INFO] 導向 {target_url},此時 cookie 已在 Network 層")
driver.get(target_url)
# === 驗證瀏覽器端 cookies ===
browser_cookies = driver.get_cookies()
print("\n=== Browser Cookies ===")
for bc in browser_cookies:
print(bc)
# driver.quit()
🧩 運作原理
Selenium 的 add_cookie() 是 browser-level,因此:
- 必須先 navigate 到該 domain
- 否則出現
invalid cookie domain
而 CDP(Chrome DevTools Protocol)是 network stack level:
✔ 不需要先載入 domain
✔ 可在第一個 request 發送前植入 cookie
✔ server 第一次看到的 cookie = 你設定的 cookie
避免 server 偵測 cookie 值從空 → 有值、或從 A → B 的變化。
官方範例
Using Chrome DevTools Protocol with Selenium
https://www.selenium.dev/documentation/webdriver/bidi/cdp/