Selenium控制Chrome无法读取已有Cookie,但网站可识别的技术问题
一、Cookie的存储位置
你指定的user-data-dir文件夹下,Default/Cookies是核心存储文件——这是一个SQLite数据库,所有已保存的网站Cookie(包括dw.com和paris.com的)都存在这里面。
二、为什么网站能识别你,但driver.get_cookies()读不到
driver.get_cookies()有个关键限制:它只能读取当前Selenium会话中已经加载到内存里的Cookie。重启会话后,你还没访问dw.com或paris.com,浏览器还没把这两个域名的Cookie从SQLite数据库加载到当前会话的内存中,所以调用该方法会返回空列表。
而当你手动访问这两个网站时,浏览器会自动从本地SQLite数据库中匹配对应域名的Cookie并发送给网站,所以网站能识别你,不再弹出Cookie授权提示。
三、如何读取这些Cookie
有两种可行的方式:
- 方式一:先访问目标网站再读取
在调用driver.get_cookies()之前,先执行driver.get("https://www.dw.com")和driver.get("https://www.paris.com"),浏览器会将对应域名的Cookie加载到会话内存中,之后就能通过driver.get_cookies()读取到这些网站的Cookie。如果需要分域名读取,可以访问单个域名后调用该方法。 - 方式二:直接读取SQLite数据库
用Python的sqlite3模块直接打开user-data-dir/Default/Cookies文件,查询里面的Cookie数据。示例代码如下:import sqlite3 import os user_data_dir = "<你的user-data-dir完整路径>" cookies_db_path = os.path.join(user_data_dir, "Default", "Cookies") # 注意:需确保浏览器已关闭,否则数据库会被锁定无法读取 conn = sqlite3.connect(cookies_db_path) cursor = conn.cursor() # 查询dw.com相关的Cookie cursor.execute("SELECT name, value, domain FROM cookies WHERE domain LIKE '%dw.com%'") dw_cookies = cursor.fetchall() for cookie in dw_cookies: print(f"名称: {cookie[0]}, 值: {cookie[1]}, 域名: {cookie[2]}") conn.close()
内容的提问来源于stack exchange,提问作者C4H7Cl2O4P
相关产品推荐
相关产品推荐

