2011-09-04 24 views
8

Có thể truy xuất dữ liệu từ bộ nhớ cục bộ chrome/firefox bằng C# không?Truy xuất dữ liệu từ bộ nhớ cục bộ của trình duyệt bằng cách sử dụng C#

+0

Từ đó trình duyệt? Chrome, FireFox, IE, ...? Từ phiên bản nào? –

+0

Tôi thích từ chrome, từ bất kỳ phiên bản có sẵn (phiên bản mới nhất là tốt). nhưng từ bất kỳ phiên bản của firefox/chrome nó sẽ được hoàn hảo (tôi đoán nếu nó hoạt động trong phiên bản chrome x nó sẽ làm việc trên bất kỳ phiên bản cao hơn x chính xác?) – adi

Trả lời

9

Tuyên bố từ chối trách nhiệm: Tôi đã thử nghiệm tính năng này trên Windows 7 x64 đang chạy Google Chrome 13.0.782.220 tại thời điểm này. Thông tin được cung cấp ở đây là kết quả của nghiên cứu của riêng tôi và không phải là bất kỳ cách hoặc API chính thức nào để truy xuất thông tin này. Sử dụng có nguy cơ của riêng bạn. Ngoài ra, kỹ thuật được trình bày ở đây có thể vi phạm với bất kỳ bản phát hành nào trong tương lai nếu Chrome thay đổi cách lưu trữ thông tin này.


Vì vậy, Google Chrome sử dụng SQLite để lưu trữ dữ liệu lưu trữ cục bộ. Bạn có thể sử dụng trình điều khiển được quản lý System.Data.SQLite để đọc nó từ ứng dụng .NET của bạn. Nếu bạn đang chạy trên Windows 7 (không biết cho người khác vì đó là một trong tôi có và có thể kiểm tra), bạn sẽ có thư mục sau:

c:\Users\SOMEUSERNAME\AppData\Local\Google\Chrome\User Data\Default\Local Storage\ 

Thư mục này sẽ chứa nhiều file với phần mở rộng .localstorage. Mỗi tệp cho trang web khác nhau. Ví dụ cho StackOverflow tôi có http_stackoverflow.com_0.localstorage nhưng tất nhiên đặt tên này là hoàn toàn tùy ý và bạn không thể dựa vào nó. Mỗi tệp đại diện cho một cơ sở dữ liệu SQLite.

Tôi đã nhận thấy rằng cơ sở dữ liệu này chứa một bảng gọi là ItemTable với 2 cột chuỗi được gọi là keyvalue.

Vì vậy, để đọc các giá trị đó là một vấn đề đơn giản của việc gửi một truy vấn SQL:

class Program 
{ 
    static void Main() 
    { 
     using (var conn = new SQLiteConnection("Data Source=http_stackoverflow.com_0.localstorage;Version=3;")) 
     using (var cmd = conn.CreateCommand()) 
     { 
      conn.Open(); 
      cmd.CommandText = "SELECT key, value FROM ItemTable"; 
      using (var reader = cmd.ExecuteReader()) 
      { 
       while (reader.Read()) 
       { 
        Console.WriteLine(
         "key: {0}, value: {1}", 
         reader.GetString(reader.GetOrdinal("key")), 
         reader.GetString(reader.GetOrdinal("value")) 
        ); 
       } 
      } 
     } 
    } 
} 
+0

Cảm ơn bạn rất nhiều! bạn thực sự giúp tôi. – adi

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