2010-04-01 8 views
24

Ich möchte ein einfaches Programm schreiben, das meine Internetaktivität über einen bestimmten Zeitraum anzeigt (welche Seite ich besucht habe, wie oft und so weiter). Ich verwende meistens Google Chrome Browser. Ich habe den Chrome-Browser-Verlauf an diesem Ort gefunden - C: \ Dokumente und Einstellungen \ Lokale Einstellungen \ Anwendungsdaten \ Google \ Chrome \ Benutzerdaten \ Standard (bitte korrigieren Sie mich, wenn ich falsch liege). Wie kann ich die Verlaufsdateien öffnen? Sie haben keine Dateierweiterung. Ich konnte nicht mit Notepad, SQLite-Browser öffnen. Wie kann ich programmgesteuert auf diese Daten zugreifen? Ich möchte wissen, welches Dateiformat es ist und wie man es mit einer Programmiersprache wie C# liest.Wie programmgesteuert auf dem lokalen Computer auf den Google Chrome-Browserverlauf zugreifen

Antwort

14

Es ist nur eine SQlite 3-Datenbank, ich konnte es erfolgreich öffnen (obwohl Sie natürlich eine gesperrte Datenbank eines laufenden Browsers nicht öffnen können).

+0

Was haben Sie benutzt, um es erfolgreich zu öffnen? – Arjang

+0

@Arjang Ein sqlite3-Client, offensichtlich – wRAR

+0

Danke für die Antwort – Arjang

0

Ich weiß Safari verwendet Binary PLists für seine Geschichte (und SQLite für seinen Cache). Ist es möglich, dass Chrome dasselbe tut?

5

Zum Anzeigen von SQLite-Datenbanken (was der Chromium-Verlaufsindex ist), habe ich sqlitebrowser bevorzugt. Es ist kostenlos und funktioniert unter Windows, Mac und Linux. Ein absoluter Favorit für mich.

7

Hier ist eine Klasse, die ich erstellt habe, um Browserdaten von Google Chrome zu lesen. Der meiste Code, den ich von here bekommen habe, aber ich habe es optimiert, um Unterstützung für Google Chrome hinzuzufügen. Wahrscheinlich möchten Sie auch die SQLite für .Net von here herunterladen und die Referenzen zu System.Data.Sqlite hinzufügen.

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

Die Klasse für die 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; 
    } 
} 

Es funktionierte wie ein Zauber für mich. Hoffe es hilft

2

Da das ursprüngliche Plakat nach einem einfachen Programm fragte, hier ist es. Das Programm wurde von der Java-Workspace-Website angepasst (wie im Code angegeben). Sie müssen das Argument für getConnection() ändern, um darauf zu verweisen, wo sich die Verlaufsdateien auf Ihrem Computer befinden. Das Programm kompiliert und läuft auf meinem Linux 2.6.39 Umgebung:

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

Es ist ein Open-Source-Programm namens Hindsight (https://github.com/obsidianforensics/hindsight), den Browserverlauf in Chrome analysiert. Während das Programm ziemlich umfangreich und kompliziert ist, greift es über SQL-Abfragen auf die verschiedenen Chrome SQLite-Dateien zu, die unabhängig voneinander entweder in einem SQLite-Browser oder einem anderen Programm abgerufen und verwendet werden können.

Ein Beispiel für eine für den Chrome v30 + History-Datenbank ist:

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 

Es gibt viele weitere SQL-Abfragen für verschiedene Chrome Datenbanken sowie verschiedene Versionen von Chrome.

Verwandte Themen