首页 > 解决方案 > Selenium:driver.get_cookies() 返回不完整的 cookie 列表

问题描述

返回的cookies如下:

[
    {
        "domain": "www.carid.com",
        "name": "uxatc",
        "value": "%13%18%07%13%0D%07%13J%07%14J%07%0DJ%07%13%14%07%13I%07%12%13%0F%09%0E%1E%07%13%1F%1D%1A%17%08%1E%07%14%0F%1D%1A%17%08%1E%07%08%17%0F%09%0E%1E%07%16%16%07%16%1F%07%0F%08%07%0F%16%07%10%1F%07%15%16%07%0D%08%0D%12%08%12%19%17%1E%07%0C%10%07%1F%1F%07%1F%10%07%0C%1F%07%15%0C%1D%1A%17%08%1E%07%1F%19%07%03%02%07%08%18%07%0FJJNMMINOJLJCLK%07%0FI%07",
        "path": "/",
        "httpOnly": false,
        "secure": false
    },
    {
        "domain": ".carid.com",
        "name": "xid",
        "value": "21f70e8bba820dcaf620307b1717f90c",
        "path": "/",
        "httpOnly": true,
        "secure": false
    },
    {
        "domain": ".carid.com",
        "name": "xidRes",
        "value": "21f70e8bba820dcaf620307b1717f90c",
        "expiry": 1567463776,
        "path": "/",
        "httpOnly": true,
        "secure": false
    },
    {
        "domain": "www.carid.com",
        "name": "store_language",
        "value": "US",
        "expiry": 1597790176,
        "path": "/",
        "httpOnly": false,
        "secure": true
    },
    {
        "domain": "www.carid.com",
        "name": "uxat",
        "value": "%13%18K%07%0DJ%07%13J%1D%1A%17%08%1E%07%14J%1D%1A%17%08%1E%07%13%1F%1D%1A%17%08%1E%07%14%0F%1D%1A%17%08%1E%07%08%17%0F%09%0E%1E%07%16%16%07%16%1F%07%0F%08%07%0F%16%07%10%1F%07%15%16%07%0D%08%0D%12%08%12%19%17%1E%07%0C%10%07%1F%1F%07%1F%10%07%0C%1F%07%15%0C%1D%1A%17%08%1E%07%1F%19%07%13IK%07",
        "path": "/",
        "httpOnly": false,
        "secure": false
    },
    {
        "domain": "www.carid.com",
        "name": "uxid2",
        "value": "16fc88Ve3eb83cfbccGc5",
        "path": "/",
        "httpOnly": false,
        "secure": false
    },
    {
        "domain": "www.carid.com",
        "name": "uxid",
        "value": "8a58hVe3eb83cfc13Ym8",
        "path": "/",
        "httpOnly": false,
        "secure": false
    }
]

有 7 个 cookie,但浏览器有 17 个 cookie:

火狐饼干

为什么缺少 cookie?有没有办法得到所有的饼干?

标签: pythonseleniumfirefoxselenium-webdrivercookies

解决方案


可能是因为您在获取 cookie 之前没有等待页面完全加载。我检查了网站并观察了 cookie 的状态。页面在汽车选择 div 上完全加载之前,cookie 比页面完全加载之后少。

即使驱动程序认为页面已完全加载,也可能不是。它可能会运行一些后台脚本。最好在你想做任何事情之前检查它。

工作示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
opt = webdriver.FirefoxOptions()
# opt.headless = True
driver = webdriver.Firefox(options=opt)
driver.delete_all_cookies()
driver.get("https://carid.com")
cookies_before = driver.get_cookies()
WebDriverWait(driver, 15).until(
        EC.visibility_of_element_located(
                (By.XPATH, '//div[contains(@class, "select-vehicle-button")]')
        ))
print("Loaded!")
cookies_after = driver.get_cookies()
print(bool(cookies_before == cookies_after))
print(f"Cookies before: {len(cookies_before)}.")
print(f"Cookies after: {len(cookies_after)}.")
print(cookies_after)
driver.quit()

前后不同时的输出(仅有时):

Loaded!
False
Cookies before: 5.
Cookies after: 17.

注意:如果你在无头模式下运行它,请小心。Chrome headless 将无法在此站点上运行,Firefox headless 将。


推荐阅读