在使用Python的Selenium库打卡网页后,通过CDP命令获取所有cookies(包括Httponly和Secure的cookies)_selenium cdp
通过 Chrome DevTools Protocol (CDP) 结合 Selenium 可以直接获取浏览器存储的所有 Cookies(包括所有域名下的 Cookies),以下是详细步骤:
步骤 1:配置 Chrome 启用 CDP启动 Chrome 浏览器时需启用远程调试端口(Remote Debugging Port),这是使用 CDP 的前提:
from selenium import webdriverfrom selenium.webdriver.chrome.options import Options# 配置 Chrome 选项chrome_options = Options()chrome_options.add_argument(\"--remote-debugging-port=9222\") # 启用调试端口chrome_options.add_argument(\"--headless=new\") # 可选:无头模式# 初始化 WebDriverdriver = webdriver.Chrome(options=chrome_options)
步骤 2:通过 CDP 命令获取所有 Cookies使用 Selenium 的 execute_cdp_cmd
方法发送 CDP 命令 Network.getAllCookies
:
# 发送 CDP 命令获取所有 Cookiescookies_response = driver.execute_cdp_cmd(\"Network.getAllCookies\", {})all_cookies = cookies_response.get(\"cookies\", [])# 打印结果print(\"所有 Cookies 列表:\", all_cookies)
完整代码示例
from selenium import webdriverfrom selenium.webdriver.chrome.options import Options# 配置 Chrome 并启用 CDPchrome_options = Options()chrome_options.add_argument(\"--remote-debugging-port=9222\")driver = webdriver.Chrome(options=chrome_options)# 打开任意网页(可选)driver.get(\"https://www.example.com\")# 使用 CDP 命令获取所有 Cookiestry: cookies = driver.execute_cdp_cmd(\"Network.getAllCookies\", {}).get(\"cookies\", []) print(\"获取到的 Cookies 数量:\", len(cookies)) for cookie in cookies: print(f\"名称: {cookie[\'name\']}, 值: {cookie[\'value\']}, 域名: {cookie[\'domain\']}\")except Exception as e: print(\"获取 Cookies 失败:\", e)# 关闭浏览器driver.quit()
关键点说明
- 启用调试端口: -
--remote-debugging-port=9222
是使用 CDP 的关键配置。 - 如果未启用此端口,execute_cdp_cmd
将无法工作。 - CDP 命令
Network.getAllCookies
: - 该命令返回浏览器存储的 所有 Cookies,包括不同域名下的 Cookies。 - 返回的 Cookies 信息包含name
、value
、domain
、path
、expires
等字段。 - 与传统方法的区别: - 传统
driver.get_cookies()
只能获取当前页面域名下的 Cookies。 - CDP 方法可以获取浏览器全局存储的 Cookies,无需切换标签页或域名。
常见问题
- 返回空列表:
- 确保浏览器已加载过页面(部分 Cookies 可能在页面加载后生成)。
- 检查浏览器隐私设置(如隐身模式下可能无 Cookies)。
- 安全限制:
- 部分 Cookies 可能标记为
HttpOnly
或Secure
,但 CDP 通常仍可获取(与 JavaScript 不同)。
- 部分 Cookies 可能标记为
- 浏览器兼容性:
- CDP 需要 Chrome 或基于 Chromium 的浏览器(如 Edge)。
- 确保 Chrome 和 ChromeDriver 版本兼容(建议使用最新稳定版)。通过上述方法,你可以直接通过 Selenium 调用底层 CDP 接口,高效获取完整的浏览器 Cookies 数据。