我正在尝试创建一个python脚本,该脚本将在Firefox中访问带有cookie的网站。如果它支持Firefox 3,cookielib.MozillaCookieJar会工作。有没有办法在python中访问Firefox 3 cookie?
我看到[home] /。mozilla / firefox / [randomletters]下有两个文件.default /名为cookies.sqlite和cookies-nontor.xml。 .xml文件看起来很容易编写一个将从中返回CookieJar的函数,但是如果已经有一个模块执行此操作,那么我想避免重新发明轮子。
答案 0 :(得分:2)
此处a recipe用于访问FF 3中的SQLite Cookie。Python bug Tracker上有一个补丁,Mechanize也支持此补丁。
答案 1 :(得分:1)
我创建了一个从Firefox加载Cookie的模块,可在此处找到:https://bitbucket.org/richardpenman/browser_cookie/
使用示例:
import requests
import browser_cookie
cj = browser_cookie.firefox()
r = requests.get(url, cookies=cj)
答案 2 :(得分:1)
TryPyPy's answer让我走上正轨,但链接食谱中的代码已经过时,不适用于Python3。这是 Python3 代码,它将从正在运行的Firefox中读取cookie jar并在查询网页时使用它:
import requests
url = 'http://github.com'
cookie_file = '/home/user/.mozilla/firefox/f00b4r.default/cookies.sqlite'
def get_cookie_jar(filename):
"""
Protocol implementation for handling gsocmentors.com transactions
Author: Noah Fontes nfontes AT cynigram DOT com
License: MIT
Original: http://blog.mithis.net/archives/python/90-firefox3-cookies-in-python
Ported to Python 3 by Dotan Cohen
"""
from io import StringIO
import http.cookiejar
import sqlite3
con = sqlite3.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 = http.cookiejar.MozillaCookieJar()
cookie_jar._really_load(s, '', True, True)
return cookie_jar
cj = get_cookie_jar(cookie_file)
response = requests.get(url, cookies=cj)
print(response.text)
使用Python 3.4.2和Firefox 39.0在Kubuntu Linux 14.10上进行测试。代码也可以从my Github repo获得。