Python Selenium脚本添加Cookie时遇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
相关产品推荐
相关产品推荐

