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

Bor*_*jaX 7 python cookies ubuntu google-chrome

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

在Chrome中,用户<select>可以选择他/她的首选语言.该信息由Chrome存储在Cookie中.

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

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

我一直在看Chrome 的命令行开关,但我没有看到任何有用的东西.最多,--enable-file-cookies选项,然后尝试打开并解析cookie文件......不知何故,但我能找到的所有信息都非常模糊.

先感谢您!

更新.进一步搜索(1,2)似乎表明,Chrome会保存使用SQL精简版的cookie.我正在调查这个.也许有希望......

Bor*_*jaX 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()
Run Code Online (Sandbox Code Playgroud)

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