You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Selenium脚本添加Cookie时遇InvalidCookieDomainException错误

问题解决:InvalidCookieDomainException 错误修复

错误原因

  • 添加Cookie前未访问目标站点:Selenium要求必须先加载目标域名的页面(哪怕是空白页),才能给该域名添加Cookie,否则浏览器会判定Cookie域名不匹配。
  • 仅添加单个Cookie:原代码只读取了cookies[0]单个Cookie,未加载完整的会话Cookie集合,无法模拟正常用户会话。
  • Cookie域名适配问题:部分Cookie的域名是.ria.com或auto.ria.com,需先将浏览器上下文切换到目标域名下,才能正确识别这些跨子域名的Cookie。

修复后的代码

import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json

url = 'https://auto.ria.com/uk/auto_audi_q5_34319384.html'
base_domain = 'https://auto.ria.com'  # 先访问基础域名切换上下文

def get_page_cookies():
    with open('cookietest.json', 'r', newline='') as inputdata:
        cookies = json.load(inputdata)

    options_with_cookie = uc.ChromeOptions()
    options_with_cookie.add_argument('--disable-blink-features=AutomationControlled')
    driver_with_cookie = uc.Chrome(options=options_with_cookie)
    driver_with_cookie.implicitly_wait(10)
    
    # 关键步骤:先访问目标域名页面,切换浏览器上下文
    driver_with_cookie.get(base_domain)
    
    # 遍历添加所有Cookie,跳过无效项
    for cookie in cookies:
        # 处理过期时间格式问题,转成整数避免Selenium报错
        if 'expiry' in cookie and isinstance(cookie['expiry'], float):
            cookie['expiry'] = int(cookie['expiry'])
        try:
            driver_with_cookie.add_cookie(cookie)
        except Exception as e:
            print(f"跳过无效Cookie: {cookie['name']},错误: {str(e)}")
    
    # 重新加载目标页面,此时Cookie已生效
    driver_with_cookie.get(url)
    
    wait = WebDriverWait(driver_with_cookie, 10)
    show_number_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 
'#floatingButtons > div:nth-child(1) > a')))
    show_number_button.click()
    phone_number = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, 
'#phonesBlock > div > a')))
    print(phone_number.text)

    driver_with_cookie.quit()

get_page_cookies()

额外说明

  • 先访问base_domain是为了让浏览器将当前上下文切换到目标域名下,确保后续添加Cookie时域名匹配。
  • 遍历Cookie时加入异常捕获,避免个别无效Cookie导致脚本中断。
  • 部分Cookie的expiry字段为浮点数,需转换为整数才能被Selenium正确识别。

内容的提问来源于stack exchange,提问作者AnKus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:59:54