Ubuntu Chrome:如何从python脚本中读取cookie

时间:2012-04-12 15:26:02

标签: python google-chrome cookies ubuntu

我正在创建一个包含两个部分的小应用程序:其中一个显示在Chrome浏览器中,另一个是用Python编程的本地应用程序。

在Chrome中,用户有一个<select>来选择他/她的首选语言。该信息由Chrome存储在Cookie中。

我想知道是否可以检索该语言首选项(意思是,读取cookie),因此当我运行本地应用程序时,它将显示在用户已使用Chrome选择的同一种语言上。

我无法改变系统的语言环境(这可能是最有意义的)。这必须保留英文,但如果用户通过Chrome选择中文作为首选语言,然后启动本地应用程序,我希望该应用程序能够以中文启动

我一直在关注Chrome的command line switches,但我没有看到任何有用的内容。最多是--enable-file-cookies选项,然后尝试打开并解析cookie文件......不知何故,但我能找到的所有信息都非常模糊。

提前谢谢!

更新。进一步搜索(12)似乎表明Chrome使用SQL lite存储Cookie。我正在调查这个。也许有希望......

1 个答案:

答案 0 :(得分:8)

是的,正如我在对我的问题的评论中所提到的,sqlite3听起来很有希望......我学习阅读的那一天,我将征服世界!!

无论如何,以防万一对其他人有帮助:

#!/usr/bin/env python
import os
import sqlite3
import pwd

_cookieName = "preferredLanguage"

def getPreferredLanguageFromCookieDB():
    retval="en-US"
    cookieDBFilename = os.path.join(pwd.getpwuid(1000).pw_dir, ".config/google-chrome/Default/Cookies")
    if os.path.isfile(cookieDBFilename):
        connection = sqlite3.connect(cookieDBFilename)
        querier = connection.cursor()
        numCookiesMatching = int(querier.execute('SELECT COUNT(*) FROM cookies WHERE (host_key="127.0.0.1" or host_key="localhost") and name="%s"' % (_cookieName)).fetchone()[0])
        if numCookiesMatching == 1:
            retval = querier.execute('SELECT value FROM cookies WHERE (`cookies`.`host_key`="127.0.0.1" or `cookies`.`host_key`="localhost") and `cookies`.`name` = "%s"' % (_cookieName)).fetchone()[0]
        elif numCookiesMatching == 0:
            print("::getPreferredLanguageFromCookieDB > No cookie for '%s' found. Assuming wizard hasn't run yet, which is weird, but not critical" % (_cookieName))
            retval="en-US"
        else:
            raise KeyError("Found %s cookies matching %s in file %s. This shouldn't have happened" % (numCookiesMatching, _cookieName, cookieDBFilename))
            retval=None
    else:
        print("::getPreferredLanguageFromCookieDB > Cookie 'db' (actually, file) %s doesn't exist" % (cookieDBFilename))
        retval="en-US"

    return retval


if __name__ == "__main__":
    print "Prefered language: %s" % getPreferredLanguageFromCookieDB()

这个小片段将连接到Cookies“数据库”(实际上只是文件,但无论如何......)并读取由preferredLanguage或{发出的“localhost”cookie的值{1}}。如果localhost发布了多个“127.0.0.1”cookie,它将崩溃。