返回的cookie是这些:
[
{
"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?
答案 0 :(得分:1)
可能是因为您没有在获取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将无法在该网站上运行。
答案 1 :(得分:0)
我认为您可能应该使用请求模块来获取要查看的所有cookie。
with requests.Session() as s:
s.get('website.com')
print(s.cookies)
如果没有,请尝试
print(s.cookies._cookies)
答案 2 :(得分:0)
get_cookies()
方法返回一组字典,对应于当前会话中可见的cookie。
cookies = driver.get_cookies()
由于AUT (application under test)基于JavaScript,因此在存储cookies时,您需要为某些 JavaScript 引入WebDriverWait已启用的元素打开element_to_be_clickable()
,然后收集cookie。
此外,cookies包含许多信息,包括域,名称,值, httpOnly ,安全等。因此,一个键/值对可能不足。但是,您可以使用Cookie的名称及其对应的 value 来构建自己的字典。
例如:
代码块:
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox(executable_path=r'C:\WebDrivers\geckodriver.exe')
driver.get("https://carid.com")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.select-vehicle-button")))
cookies_list = driver.get_cookies()
print("*****")
print(f"Cookies list: {len(cookies_list)}")
print("*****")
cookies_dict = {}
for cookie in cookies_list:
cookies_dict[cookie['name']] = cookie['value']
print(cookies_dict)
控制台输出:
*****
Cookies list: 16
*****
{'xid': '7c85b0b99fb3dcf885d655c31a8fda40', 'store_language': 'US', 'uxat': '%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%0F%09%0E%1E%07%1F%19%07%13IK%07', 'uxid2': 'k8e2gUea05cdacf54K17d', 'uxid': '1ecehjYea05cdad009Q12n', '_gaexp': 'GAX1.2.pKl-9WqUR9OGPHEwCLKksQ.18690.1', '_ga': 'GA1.2.2081848464.1608191540', '_gid': 'GA1.2.1590349607.1608191540', '_gat': '1', '_uetsid': 'cb51ab90403c11eba41c7dda4c599643', '_uetvid': 'cb524450403c11eb89d6b3285069b4af', '__gads': 'ID=80ccbeefc3c87d2b-22e1ddad3cc5008a:T=1608191860:RT=1608191860:S=ALNI_MYhnP8XRpcV3S7HM2qf0XPr8SRRaQ', 'RefererCookie': 'https%3A%2F%2Fwww.carid.com%2F', '_fbp': 'fb.1.1608191549984.531722481', 'xidRes': '7c85b0b99fb3dcf885d655c31a8fda40', 'uxid3': '83g8jSea05ce07dddQ117'}
此 16 个Cookie的数量与 Firefox 浏览器中观察到的Cookie的数量完全匹配。