簡體   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