【问题标题】:Ubuntu Chrome: How to read a cookie from a python scriptUbuntu Chrome:如何从 python 脚本中读取 cookie
【发布时间】:2012-04-24 23:39:11
【问题描述】:

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

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

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

不过,我无法更改系统的区域设置(这可能是最有意义的)。那必须保持英文,但如果用户通过 Chrome 选择 中文 作为首选语言,然后启动本地应用程序,我希望该应用程序能够以 中文 启动em>。

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

提前谢谢你!

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

【问题讨论】:

  • python 客户端和网站是否都在与服务器通信?如果是这样,您可以简单地将语言首选项存储在那里(由浏览器发送)并从 python 客户端检索信息...
  • @Hoff -> 我也想过这个问题。 python 客户端并不完全与服务器对话,但服务器在 localhost 中运行,因此(出于实际目的)答案是“是的”。我可以让服务器存储语言首选项。我会把它作为最后的资源......这也是我对 Chrome 中的 cookie 管理很好奇......如果我已经通过 Chrome 将首选语言存储在硬盘驱动器(在 cookie 中),而且我可以避免使用服务器重新存储它,那太好了。感谢您的想法,尽管 :)
  • 命令 sqlite3 ~/.config/google-chrome/Default/Cookies 看起来很有希望......将继续发布:)

标签: python google-chrome cookies ubuntu


【解决方案1】:

是的,正如我在问题的 cmets 中提到的,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()

这个小 sn-p 将连接到 Cookies“数据库”(实际上只是文件,但无论如何......)并读取由 localhost127.0.0.1 发出的“preferredLanguage”cookie 的值.如果 localhost 发出多个“preferredLanguage”cookie,它将崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多