Selenium:driver.get_cookies()返回不完整的cookie列表

时间:2019-08-20 07:27:40

标签: python selenium firefox selenium-webdriver cookies

返回的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:

firefox cookies

为什么缺少cookie?有没有办法获取所有cookie?

3 个答案:

答案 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()

get_cookies()方法返回一组字典,对应于当前会话中可见的cookie。

cookies = driver.get_cookies()

此用例

由于AUT (application under test)基于JavaScript,因此在存储时,您需要为某些 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的数量完全匹配。

  • 浏览器快照:

carid