2012-04-12 26 views
7

Tôi đang tạo một ứng dụng nhỏ có hai phần: Một trong số chúng được hiển thị bên trong trình duyệt Chrome và một là một ứng dụng cục bộ được lập trình bằng Python.Ubuntu Chrome: Cách đọc cookie từ tập lệnh python

Trong Chrome, người dùng có <select> để chọn ngôn ngữ ưa thích của mình. Thông tin đó được Chrome lưu trữ trong cookie.

Tôi muốn biết nếu có thể truy xuất tùy chọn ngôn ngữ đó (nghĩa là đọc cookie) vì vậy khi tôi chạy ứng dụng cục bộ, nó sẽ được hiển thị trên cùng một ngôn ngữ mà người dùng đã chọn với Chrome.

Tôi không thể thay đổi ngôn ngữ của hệ thống, mặc dù (đó là những gì có thể sẽ có ý nghĩa nhất). Điều đó phải duy trì bằng tiếng Anh, nhưng nếu người dùng chọn tiếng Trung làm ngôn ngữ ưa thích thông qua Chrome và sau đó khởi chạy ứng dụng cục bộ, tôi muốn ứng dụng đó có thể bắt đầu ở Trung Quốc.

Tôi đã xem command line switches cho Chrome, nhưng tôi chưa thấy bất kỳ điều gì hữu ích. Tối đa, tùy chọn --enable-file-cookies, sau đó thử mở và phân tích cú pháp tệp cookie ... bằng cách nào đó, nhưng tất cả thông tin tôi có thể tìm thấy khá mơ hồ.

Cảm ơn bạn trước!

Cập nhật. Tìm kiếm thêm (1, 2) dường như chỉ ra rằng Chrome lưu trữ cookie bằng cách sử dụng SQL lite. Tôi đang xem xét điều này. Có thể có hy vọng với điều đó ...

+0

là cả ứng dụng khách trăn và trang web nói chuyện với máy chủ? nếu có, bạn chỉ cần lưu trữ tùy chọn ngôn ngữ ở đó (được gửi bởi trình duyệt) và truy xuất thông tin từ trình khách python ... – Hoff

+0

@Hoff -> Tôi cũng nghĩ về điều đó. Các khách hàng python không chính xác nói chuyện với máy chủ, nhưng máy chủ đang chạy trong localhost vì vậy (cho mục đích thực tế) câu trả lời là "yeah". Tôi có thể có máy chủ lưu trữ các tùy chọn ngôn ngữ. Tôi sẽ giữ nó như một nguồn tài nguyên cuối cùng ... Tôi cũng tò mò về việc quản lý cookie trong Chrome và ... Nếu tôi đã có ngôn ngữ ưa thích được lưu trữ trong ổ cứng (trong cookie) của Chrome, và tôi có thể tránh lưu trữ lại bằng máy chủ, điều đó thật tuyệt. Cảm ơn ý tưởng, mặc dù *:) * – BorrajaX

+0

Lệnh sqlite3 ~/.config/google-chrome/Mặc định/Cookie có vẻ đầy hứa hẹn ... Sẽ tiếp tục đăng :) – BorrajaX

Trả lời

8

Đúng, như tôi đã đề cập trong phần nhận xét cho câu hỏi của mình, sqlite3 có vẻ hứa hẹn ... Ngày tôi học đọc, tôi sẽ chinh phục thế giới !!

Dù sao, chỉ trong trường hợp có ích cho người khác:

#!/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() 

đoạn nhỏ này sẽ kết nối với các Cookies "cơ sở dữ liệu" (thực sự là chỉ nộp nhưng, dù sao ...) và đọc giá trị của cookie "preferredLanguage" được phát hành bởi localhost hoặc 127.0.0.1. Nó sẽ sụp đổ nếu có nhiều hơn một cookie "preferredLanguage" do localhost cấp.

Các vấn đề liên quan