如何使用 Python 从网络浏览器获取 cookie?

Posted

技术标签:

【中文标题】如何使用 Python 从网络浏览器获取 cookie?【英文标题】:How to get cookies from web-browser with Python? 【发布时间】:2012-02-07 09:42:30 【问题描述】:

上下文:我正在处理对 OpenID 消费者(实际上是 StackExchange)的后端访问。如果我要向用户提供所有可能的 OpenID 提供程序作为选项,那么我必须模拟浏览器交互以对每个提供程序进行身份验证,然后才能提交 Open ID URL。但是,我想我可以通过访问用户网络浏览器的现有 cookie 并直接使用 URL 向消费者请求身份验证来缩短这一点。

问题: 如何访问用户的网络浏览器的 cookie?我很少看到有关如何使用 Python 进行操作的信息。这个previous question部分回答了关于Firefox的问题,特别指出下面的the code sample她。但是,我需要从 Linux 上最常用的网络浏览器访问 cookie,而不仅仅是 Firefox。

#! /usr/bin/env python
# Protocol implementation for handling gsocmentors.com transactions
# Author: Noah Fontes nfontes AT cynigram DOT com
# License: MIT

def sqlite2cookie(filename):
    from cStringIO import StringIO
    from pysqlite2 import dbapi2 as sqlite

    con = sqlite.connect(filename)

    cur = con.cursor()
    cur.execute("select host, path, isSecure, expiry, name, value from moz_cookies")

    ftstr = ["FALSE","TRUE"]

    s = StringIO()
    s.write("""\
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This is a generated file!  Do not edit.
""")
    for item in cur.fetchall():
        s.write("%s\t%s\t%s\t%s\t%s\t%s\t%s\n" % (
            item[0], ftstr[item[0].startswith('.')], item[1],
            ftstr[item[2]], item[3], item[4], item[5]))

    s.seek(0)

    cookie_jar = cookielib.MozillaCookieJar()
    cookie_jar._really_load(s, '', True, True)
    return cookie_jar

问题:Python 是否提供了一个模块,可以方便地从网络浏览器中提取 cookie? 否则,我应该如何修改上述代码以从其他浏览器(如 Chromium 等)提取 cookie? p>

PS:还是我以错误的方式看待最初的问题(即向 OpenID 提供者进行身份验证)? (我觉得我只是在用另一个问题代替一个问题。)

【问题讨论】:

你可能想看看***.com/questions/4634408/… 或***.com/questions/921532/retrieving-cookies-python @monkut:实际上,这仅与在整个会话期间保留 cookie 有关,我已经知道该怎么做。我想做的是从浏览器本身获取cookie。 您可能想查看用于检索 cookie 的 Cookie 模块。 thiscookie = Cookie.SimpleCookie() if os.environ.keys() 中的 u'HTTP_COOKIE': thiscookie.load(os.environ[u'HTTP_COOKIE']) @monkut:这里有趣的部分是os.environ.keys() 中的HTTP_COOKIE,你有更多关于它的信息吗?谢谢。 【参考方案1】:

我为此创建了一个模块,可在此处获得:https://bitbucket.org/richardpenman/browsercookie/

示例用法:

import requests
import browsercookie
cj = browsercookie.chrome()
r = requests.get('http://***.com', cookies=cj)

python3 分叉: https://github.com/borisbabic/browser_cookie3

【讨论】:

链接已更新。也可使用pip install browsercookie 现在看到这篇文章的其他人请注意:该模块不支持当前的 Chrome 版本。 python 2 版本 (bitbucket.org/richardpenman/browsercookie) 在最新的 Chrome (57) 中对我来说很好用 最近的 chrome 版本改变了加密 cookie 的方式。希望有人能弄清楚并发送补丁。【参考方案2】:

除了 browser-cookie3,您还可以尝试 https://github.com/n8henrie/pycookiecheat——截至 2021 年 4 月,它在 Ubuntu 20.04 上的 Chrome 上对我有效。

【讨论】:

以上是关于如何使用 Python 从网络浏览器获取 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python从NAT内部网络获取我的公共IPV4地址

cooke

获取 url 时如何强制网络浏览器使用 POST?

使用vue-cookies操作cookie

如何用python写爬虫来获取网页中所有的文章以及关键词

如何使用python套接字从html获取输入