首页 > 解决方案 > 发出 GET 请求时如何查看设置的所有 cookie

问题描述

引用未使用 python 请求模块获取所有 cookie 信息

OP 看到在 Chrome 上设置了许多 cookie,但在他的 Python 请求代码中没有看到大多数这些 cookie。给出的原因是“正在设置的 cookie 来自其他页面/资源,可能由 JavaScript 代码加载。”

这是我用来尝试获取在访问 URL 时加载的 cookie 的函数:

从请求导入获取
从 requests.exceptions 导入 RequestException
从 contextlib 导入关闭

def get_cookies(url):
    """
    发出 HTTP GET 请求时,从 `url` 的响应中返回 cookie。
    """
    尝试:
        s = 会话()
        以关闭(get(url,stream = True))作为resp:
            返回相应的cookies

    除了 RequestException 为 e:
        print('请求 {0} 时出错:{1}'.format(url, str(e)))
        返回无

但是使用这个功能,我只能看到 URL 设置的 cookie,而看不到其他类似广告 cookie。鉴于此设置,我如何查看其他 cookie,就像 Chrome 看到它们一样?即,当发出 GET 请求时,我如何查看所有设置的 cookie,包括来自其他页面/资源的那些?

标签: python-3.xcookiespython-requests

解决方案


做了一些工作,但我设法让它工作。基本上需要 selenium 和 chrome 来实际加载网站和所有 3rd 方的东西。其中一个输出是一个 sqlite3 cookie 数据库,./chrome_dir/Default/Cookies您可以在其中获取以供自己使用。

从硒导入网络驱动程序
导入 sqlite3

def get_cookies(url):
    """
    发出 HTTP GET 请求时,从 `url` 的响应中返回 cookie。
    """
    co = webdriver.ChromeOptions()
    co.add_argument("--user-data-dir=chrome_dir") # 创建一个目录来存放所有的chrome数据
    驱动程序 = webdriver.Chrome(chrome_options=co)
    driver.get(url)
    driver.quit()

    conn = sqlite3.connect(r'./chrome_stuff/Default/Cookies')
    c = conn.cursor()
    c.execute("SELECT * FROM 'cookies'")

    返回 c.fetchall()

推荐阅读