2010-04-01 41 views
24

Tôi muốn viết một chương trình đơn giản cho thấy hoạt động internet của tôi trong một khoảng thời gian (trang web mà tôi đã truy cập, bao nhiêu lần vv). Tôi chủ yếu sử dụng trình duyệt Google Chrome. Tôi phát hiện Chrome lưu trữ lịch sử trình duyệt tại vị trí này - C: \ Documents and Settings \ Cài đặt cục bộ \ Dữ liệu ứng dụng \ Google \ Chrome \ Dữ liệu người dùng \ Mặc định (vui lòng sửa tôi nếu tôi sai). Làm thế nào tôi có thể mở các tập tin lịch sử? Họ không có bất kỳ phần mở rộng tập tin. Tôi không thể mở bằng notepad, trình duyệt SQLite. Làm cách nào để truy cập dữ liệu này theo chương trình? Tôi muốn biết đó là định dạng tập tin và làm thế nào để đọc nó bằng cách sử dụng một ngôn ngữ lập trình như C#.Cách truy cập lịch sử trình duyệt Google Chrome theo lập trình trên máy cục bộ

Trả lời

14

Nó chỉ là một cơ sở dữ liệu SQlite 3, tôi đã có thể mở nó thành công (mặc dù tất nhiên bạn không thể mở một cơ sở dữ liệu bị khóa của một trình duyệt đang chạy).

+0

Bạn đã sử dụng điều gì để mở thành công? – Arjang

+0

@Arjang Một khách hàng sqlite3, rõ ràng là – wRAR

+0

Cảm ơn bạn đã trả lời – Arjang

0

Tôi biết Safari sử dụng Binary PLists cho lịch sử của nó (và SQLite cho bộ nhớ cache của nó). Có thể Chrome cũng đang làm như vậy không?

5

Để xem cơ sở dữ liệu sqlite (là chỉ số lịch sử Chromium), tôi đã ưu tiên sqlitebrowser. Nó hoàn toàn miễn phí và hoạt động trên Windows, Mac và Linux. An fave tất cả thời gian cho tôi.

7

Đây là lớp tôi đã tạo để đọc dữ liệu duyệt web từ Google chrome. Hầu hết mã tôi nhận được từ here nhưng tôi đã chỉnh sửa nó để thêm hỗ trợ cho Google Chrome. Bạn cũng có thể muốn tải xuống SQLite cho .Net từ here và thêm tham chiếu vào System.Data.Sqlite.

class GoogleChrome 
{ 
    public List<URL> URLs = new List<URL>(); 
    public IEnumerable<URL> GetHistory() 
    { 
     // Get Current Users App Data 
     string documentsFolder = Environment.GetFolderPath 
     (Environment.SpecialFolder.ApplicationData); 
     string[] tempstr = documentsFolder.Split('\\'); 
     string tempstr1 = ""; 
     documentsFolder += "\\Google\\Chrome\\User Data\\Default"; 
     if (tempstr[tempstr.Length - 1] != "Local") 
     { 
      for (int i = 0; i < tempstr.Length - 1; i++) 
      { 
       tempstr1 += tempstr[i] + "\\"; 
      } 
      documentsFolder = tempstr1 + "Local\\Google\\Chrome\\User Data\\Default"; 
     } 


     // Check if directory exists 
     if (Directory.Exists(documentsFolder)) 
     { 
      return ExtractUserHistory(documentsFolder); 

     } 
     return null; 
    } 


    IEnumerable<URL> ExtractUserHistory(string folder) 
    { 
     // Get User history info 
     DataTable historyDT = ExtractFromTable("urls", folder); 

     // Get visit Time/Data info 
     DataTable visitsDT = ExtractFromTable("visits", 
     folder); 

     // Loop each history entry 
     foreach (DataRow row in historyDT.Rows) 
     { 

       // Obtain URL and Title strings 
       string url = row["url"].ToString(); 
       string title = row["title"].ToString(); 

       // Create new Entry 
       URL u = new URL(url.Replace('\'', ' '), 
       title.Replace('\'', ' '), 
       "Google Chrome"); 

       // Add entry to list 
       URLs.Add(u); 
     } 
     // Clear URL History 
     DeleteFromTable("urls", folder); 
     DeleteFromTable("visits", folder); 

     return URLs; 
    } 
    void DeleteFromTable(string table, string folder) 
    { 
     SQLiteConnection sql_con; 
     SQLiteCommand sql_cmd; 

     // FireFox database file 
     string dbPath = folder + "\\History"; 

     // If file exists 
     if (File.Exists(dbPath)) 
     { 
      // Data connection 
      sql_con = new SQLiteConnection("Data Source=" + dbPath + 
      ";Version=3;New=False;Compress=True;"); 

      // Open the Conn 
      sql_con.Open(); 

      // Delete Query 
      string CommandText = "delete from " + table; 

      // Create command 
      sql_cmd = new SQLiteCommand(CommandText, sql_con); 

      sql_cmd.ExecuteNonQuery(); 

      // Clean up 
      sql_con.Close(); 
     } 
    } 

    DataTable ExtractFromTable(string table, string folder) 
    { 
     SQLiteConnection sql_con; 
     SQLiteCommand sql_cmd; 
     SQLiteDataAdapter DB; 
     DataTable DT = new DataTable(); 

     // FireFox database file 
     string dbPath = folder + "\\History"; 

     // If file exists 
     if (File.Exists(dbPath)) 
     { 
      // Data connection 
      sql_con = new SQLiteConnection("Data Source=" + dbPath + 
      ";Version=3;New=False;Compress=True;"); 

      // Open the Connection 
      sql_con.Open(); 
      sql_cmd = sql_con.CreateCommand(); 

      // Select Query 
      string CommandText = "select * from " + table; 

      // Populate Data Table 
      DB = new SQLiteDataAdapter(CommandText, sql_con); 
      DB.Fill(DT); 

      // Clean up 
      sql_con.Close(); 
     } 
     return DT; 
    } 
} 

Lớp cho URL:

class URL 
{ 
    string url; 
    string title; 
    string browser; 
    public URL(string url, string title, string browser) 
    { 
     this.url = url; 
     this.title = title; 
     this.browser = browser; 
    } 

    public string getData() 
    { 
     return browser + " - " + title + " - " + url; 
    } 
} 

Nó làm việc như một nét duyên dáng cho tôi. Hy vọng nó sẽ giúp

2

Vì áp phích ban đầu được yêu cầu cho một chương trình đơn giản, ở đây nó được. Chương trình được điều chỉnh từ trang web không gian làm việc java (như được ghi trong mã). Bạn sẽ cần phải thay đổi đối số cho getConnection() để trỏ đến nơi tệp lịch sử cư trú trên máy của bạn. Chương trình biên dịch và chạy trên môi trường Linux 2.6.39 của tôi:

/** 
Adapted from http://www.javaworkspace.com/connectdatabase/connectSQLite.do 
Date: 09/25/2012 

Download sqlite-jdbc-<>.jar from http://www.xerial.org/trac/Xerial/wiki/SQLiteJDBC, and 
compile: javac GetChromiumHistory.java 
run:  java -classpath ".:sqlite-jdbc-3.7.2.jar" GetChromiumHistory 
*/ 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

/** 
* @author www.javaworkspace.com 
* 
*/ 
public class GetChromiumHistory 
{ 
    public static void main (String[] args) 
    { 

    Connection connection = null; 
    ResultSet resultSet = null; 
    Statement statement = null; 

    try 
     { 
     Class.forName ("org.sqlite.JDBC"); 
     connection = DriverManager 
      .getConnection ("jdbc:sqlite:/home/username/.config/chromium/Default/History"); 
     statement = connection.createStatement(); 
     resultSet = statement 
      .executeQuery ("SELECT * FROM urls where visit_count > 100"); 

     while (resultSet.next()) 
      { 
      System.out.println ("URL [" + resultSet.getString ("url") + "]" + 
         ", visit count [" + resultSet.getString ("visit_count") + "]"); 
      } 
     } 

    catch (Exception e) 
     { 
     e.printStackTrace(); 
     } 

    finally 
     { 
     try 
      { 
      resultSet.close(); 
      statement.close(); 
      connection.close(); 
      } 

     catch (Exception e) 
      { 
      e.printStackTrace(); 
      } 
     } 
    } 
} 
2

Có một chương trình mã nguồn mở được gọi là Hindsight (https://github.com/obsidianforensics/hindsight) để phân tích lịch sử duyệt web trong Chrome. Trong khi chương trình khá lớn và phức tạp, nó truy cập các tệp SQLite khác nhau bằng cách sử dụng các truy vấn SQL, có thể rút ra và sử dụng độc lập, hoặc trong trình duyệt SQLite hoặc chương trình khác.

Một ví dụ về một cho v30 Chrome + cơ sở dữ liệu lịch sử là:

SELECT urls.id, urls.url, urls.title, urls.visit_count, urls.typed_count, urls.last_visit_time, urls.hidden, urls.favicon_id, visits.visit_time, visits.from_visit, visits.visit_duration, visits.transition, visit_source.source 
FROM urls JOIN visits ON urls.id = visits.url 
LEFT JOIN visit_source ON visits.id = visit_source.id 

Có rất nhiều nhiều truy vấn SQL cho cơ sở dữ liệu Chrome khác nhau, cũng như các phiên bản khác nhau của Chrome.

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