繁体   English   中英

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

[英]How to get cookies from web-browser with Python?

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

问题:
如何访问用户的网络浏览器的 cookie? 我很少看到有关如何使用 Python 执行此操作的信息。 上一个问题部分回答了有关 Firefox 的问题,特别指出了下面的代码示例 但是,我需要从 Linux 上使用的最常见的 Web 浏览器访问 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?

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

我创建了一个模块来做到这一点,可在此处获得: https : //bitbucket.org/richardpenman/browsercookie/

用法示例:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM