Comment accéder à Google Chrome historique du navigateur programmatique sur la machine locale

je veux écrire un programme simple qui montre mon activité internet sur une période de temps (quel site j'ai visité, combien de fois et ainsi de suite). J'utilise surtout Google Chrome browser. J'ai découvert L'historique du navigateur de Chrome stores à cet endroit - C:Documents et Paramètres Paramètres locauxdonnées D'Application GoogleChromedonnées de L'utilisateurpar défaut (s'il vous plaît corriger moi si je me trompe). Comment puis-je ouvrir les fichiers historiques? Ils n'ont pas d'extension de fichier. Je n'ai pas pu ouvrir en utilisant notepad, SQLite browser. Comment puis-je accéder à ces données par programmation? Je veux savoir quel format de fichier il est et comment le lire en utilisant un langage de programmation comme C#.

26
demandé sur Tejas 2010-04-01 20:50:15

6 réponses

c'est juste une base de données SQlite 3, j'ai pu l'ouvrir avec succès (bien que bien sûr vous ne pouvez pas ouvrir une base de données verrouillée d'un navigateur en cours d'exécution).

15
répondu wRAR 2010-04-01 17:00:14

Voici une classe que j'ai créée pour lire les données de navigation de Google chrome. La plupart du code que j'ai reçu de ici mais je l'ai modifié abit pour ajouter le support pour Google Chrome. Vous voulez probablement aussi télécharger le SQLite pour .Net à partir de ici et ajouter les références au Système.Données.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;
    }
}

la classe de L'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;
    }
}

ça a fonctionné comme un charme pour moi. Espérons que cela aide

8
répondu blondii 2012-04-06 18:22:17

pour la visualisation des bases de données sqlite (ce qui est ce que le Chromium history index est), j'ai préféré sqlitebrowser. C'est gratuit et fonctionne sous Windows, Mac et Linux. Un tout-temps favori pour moi.

5
répondu mt3 2011-01-13 20:29:35
getConnection () à l'endroit où l'histoire se trouvent les fichiers sur votre machine. Le programme compile et tourne sur mon environnement 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
répondu Sonny 2012-09-26 10:51:21

Il y a un programme open source appelé le Recul (https://github.com/obsidianforensics/hindsight) qui analyse l'historique de navigation de google Chrome. Tandis que le programme est plutôt grand et compliqué, il accède aux différents fichiers Chrome SQLite en utilisant des requêtes SQL, qui peuvent sortir et utiliser indépendamment, soit dans un navigateur SQLite ou un programme différent.

un exemple d'un pour la base de données D'historique Chrome v30+ est:

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

Il y a beaucoup plus de SQL requêtes pour différentes bases de données Chrome, ainsi que différentes versions de Chrome.

2
répondu Ryan 2015-11-19 16:43:56

je sais Safari utilise Listes Binaires pour son histoire (et SQLite pour sa cache). Est-il possible que Chrome fasse de même?

0
répondu Frank Krueger 2010-04-01 16:53:37