Как получить куки из веб-браузера с помощью Python? - PullRequest
11 голосов
/ 11 января 2012

Контекст:
Я работаю над серверным доступом к потребителю OpenID (на самом деле StackExchange). Если я предоставлю пользователю все возможные поставщики OpenID в качестве опции, то мне нужно будет смоделировать взаимодействие с браузером для аутентификации каждого из этих поставщиков, прежде чем я смогу отправить URL-адрес Open ID. Тем не менее, я думаю, что я мог бы сократить это, получив доступ к существующим куки-файлам веб-браузера пользователя и запросив аутентификацию у потребителя напрямую с помощью URL.

Проблема:
Как получить доступ к файлам cookie веб-браузера пользователя? Я видел очень мало информации о том, как сделать это с Python. Этот предыдущий вопрос частично отвечает на проблему, касающуюся Firefox, особенно указывая на пример кода ниже. Однако мне потребуется доступ к файлам cookie из наиболее распространенных веб-браузеров, используемых в Linux, а не только из 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 из веб-браузеров? В противном случае, как мне адаптировать приведенный выше код для извлечения файлов cookie из других браузеров, таких как Chromium и т. Д .?

PS: Или я смотрю на первоначальную проблему (т. Е. Аутентификацию поставщика OpenID) неправильно? (Мне кажется, я просто заменяю проблему другой.)

1 Ответ

15 голосов
/ 14 апреля 2015

Я создал модуль для этого, доступный здесь: https://bitbucket.org/richardpenman/browsercookie/

Пример использования:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...