Python中在使用driver.Chrome或driver.Firefox时,能够登录但无法通过get_cookies获取cookie怎么办?
大家有没有在使用 driver.Chrome ordriver.Firefox 的时候,能够登录但是无法通过 get_cookies 拿到 cookie 的情况?
求解
Python中在使用driver.Chrome或driver.Firefox时,能够登录但无法通过get_cookies获取cookie怎么办?
4 回复
httponly?
这个问题我遇到过,核心原因是cookie的存储域(domain)和你当前访问的URL不匹配。
当你用 driver.get() 访问一个URL(比如 https://example.com/login)并登录后,服务器返回的cookie通常会绑定到特定的域(例如 .example.com)。如果你之后没有通过同一个driver实例导航到该cookie作用域内的页面,而是直接调用 driver.get_cookies(),它返回的是当前浏览器页面的cookie。如果当前页面是空白页(data: 或 about:blank)或者是一个不同域的页面,你自然拿不到登录域的cookie。
解决方法很简单:登录后,先导航到cookie所属域下的任何一个有效页面(通常是网站根域名或主页面),然后再获取cookie。
下面是一个完整的代码示例,展示了正确的流程:
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 1. 启动浏览器
driver = webdriver.Chrome() # 或者 webdriver.Firefox()
try:
# 2. 导航到登录页面
login_url = "https://example.com/login"
driver.get(login_url)
time.sleep(2) # 等待页面加载,生产环境建议用WebDriverWait
# 3. 执行登录操作(这里需要替换为实际的定位器和凭证)
# 例如:
# driver.find_element(By.ID, "username").send_keys("your_username")
# driver.find_element(By.ID, "password").send_keys("your_password")
# driver.find_element(By.XPATH, "//button[@type='submit']").click()
# time.sleep(3) # 等待登录完成和跳转
# 4. 【关键步骤】登录后,确保导航到目标域的一个有效页面
# 假设登录后跳转到了主页,或者我们主动访问主页
target_domain_url = "https://example.com/" # 或 "https://example.com/dashboard"
driver.get(target_domain_url)
time.sleep(2) # 等待页面加载
# 5. 现在获取的cookies就是该域名下的cookies
cookies = driver.get_cookies()
print(f"获取到的Cookies数量: {len(cookies)}")
for cookie in cookies:
print(f"Name: {cookie['name']}, Value: {cookie['value'][:50]}...")
# 你可以将cookies保存下来,例如用于requests库:
# import requests
# session = requests.Session()
# for cookie in cookies:
# session.cookies.set(cookie['name'], cookie['value'])
finally:
# 6. 关闭浏览器
driver.quit()
核心要点总结: get_cookies() 返回的是当前页面的cookie,所以获取前要确保页面在正确的域名下。
cookie 用了 httponly
求解,怎么解决呢
webdriver,此路不通吗

