python - 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?有没有办法得到所有的饼干?
解决方案
可能是因为您在获取 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 将。
推荐阅读
- amazon-s3 - 创建具有多个 s3 路径的 aws 胶水爬虫
- c++ - 为整数指定无符号字符存储
- javascript - 对象数组中的未定义值Vuejs
- c - 在 C 中生成随机 64/32/16/ 和 8 位整数
- algorithm - 嵌套 for 循环的时间复杂度
- java - 测试用例如何测试异常?
- swift - TabView、tabItem:在选择时运行代码或添加 onTapGesture
- python - 在 .txt 文档中写单词而不重复
- database - Teradata TD_NORMALIZE 无助于合并相邻时段
- python - 在 pandas.Series 中找到所有非数字元素