2010-04-01 56 views
24

我想寫一個簡單的程序,顯示一段時間內(我訪問過哪個網站,我訪問了多少次,等等)的互聯網活動。我主要使用Google Chrome瀏覽器。我發現Chrome在這個位置存儲了瀏覽器歷史記錄 - C:\ Documents and Settings \\ Local Settings \ Application Data \ Google \ Chrome \ User Data \ Default(如果我錯了,請糾正我)。我如何打開歷史文件?他們沒有任何文件擴展名。我無法打開使用記事本,SQLite瀏覽器。如何以編程方式訪問此數據?我想知道它是哪種文件格式,以及如何使用C#等編程語言來讀取它。如何在本地機器上以編程方式訪問Google Chrome瀏覽器歷史記錄

回答

14

它只是一個SQlite 3數據庫,我能夠成功打開它(當然,您無法打開正在運行的瀏覽器的鎖定數據庫)。

+0

你用什麼來成功打開它? – Arjang 2015-12-16 00:05:52

+0

@Arjang一個sqlite3客戶端,顯然 – wRAR 2015-12-16 05:51:46

+0

感謝您的回答 – Arjang 2015-12-16 13:04:56

0

我知道Safari使用Binary PLists作爲它的歷史(和SQLite的緩存)。 Chrome是否可以做同樣的事情?

5

對於查看sqlite數據庫(這是鉻歷史指數是什麼),我更喜歡sqlitebrowser。它是免費的,適用於Windows,Mac和Linux。對我來說,這是一個全天候的時刻。

7

這是我創建的一個類,用於從Google Chrome中讀取瀏覽數據。我從here獲得的大部分代碼,但是我調整了它以增加對Google Chrome的支持。您可能還想從here下載用於.Net的SQLite,並添加對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; 
    } 
} 

的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; 
    } 
} 

它的工作對我來說就像魅力。希望它有幫助

2

由於原來的海報要求一個簡單的程序,在這裏。該程序是從java工作區網站改寫而來(如代碼中所記載的)。您需要更改參數getConnection()以指向歷史文件駐留在機器上的位置。程序編譯並運行在我的Linux 2.6.39環境:

/** 
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

有(https://github.com/obsidianforensics/hindsight)稱爲事後一個開放源碼的程序,分析在Chrome瀏覽歷史記錄。雖然該程序相當龐大且複雜,但它使用SQL查詢來訪問各種Chrome SQLite文件,SQL查詢可以在SQLite瀏覽器或不同的程序中獨立提取和使用。

一個針對Chrome V30 +歷史數據庫的一個例子是:

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 

有針對不同的Chrome數據庫更多的SQL查詢,以及不同版本的Chrome。

相關問題