Как программно получить доступ к истории браузера Google Chrome на локальном компьютере

Я хочу написать простую программу, которая показывает мою интернет-активность за определенный период времени (какой сайт я посещал, сколько раз и т. д.). Я в основном использую браузер Google Chrome. Я обнаружил, что Chrome хранит историю браузера в этом месте (пожалуйста, поправьте меня, если я ошибаюсь)

C:\Documents and Settings\<username>\Local Settings\Application Data\Google\Chrome\User Data\Default

Как я могу открыть файлы истории? У них нет расширения файла. Я не мог открыть с помощью блокнота, браузера SQLite. Как я могу получить доступ к этим данным программно? Я хочу знать, какой это формат файла и как его читать с помощью языка программирования, такого как C #.


person Tejas    schedule 01.04.2010    source источник


Ответы (6)


Это просто база данных SQlite 3, я смог ее успешно открыть (хотя, конечно, вы не можете открыть заблокированную базу данных работающего браузера).

person wRAR    schedule 01.04.2010
comment
Что вы использовали, чтобы открыть его успешно? - person jimjim; 16.12.2015
comment
@Arjang Клиент sqlite3, очевидно - person wRAR; 16.12.2015
comment
где находится путь к этому файлу SQLite? как я могу найти его на моем локальном компьютере? - person Martin AJ; 27.03.2017
comment
@MartinAJ вопрос содержит путь. Однако он может отличаться для современных версий Chrome и для разных ОС. - person wRAR; 27.03.2017
comment
@wRAR Смотрите мой ответ о том, как избежать БЛОКИРОВКИ БАЗЫ ДАННЫХ - stackoverflow.com/a/44512082/511438 (счастливого 7-летнего отвечать) - person Valamas; 13.06.2017
comment
Теперь местоположение файла sqlite было изменено на C:\Users\{username}\AppData\Local\Google\Chrome\User Data\Profile 7\History - person NM Naufaldo; 02.02.2021

Вот класс, который я создал для чтения данных просмотра из Google Chrome. Большую часть кода я получил из здесь, но Я немного подправил его, чтобы добавить поддержку Google Chrome. Возможно, вы также захотите загрузить SQLite для .Net с здесь. и добавьте ссылки на 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;
    }
}

Это сработало как шарм для меня. Надеюсь, поможет

person blondii    schedule 06.04.2012

Для просмотра баз данных sqlite (что и представляет собой индекс истории Chromium) я предпочел sqlitebrowser. Это бесплатно и работает на Windows, Mac и Linux. Любимчик на все времена для меня.

person mt3    schedule 13.01.2011

Поскольку исходный постер просил простую программу, вот она. Программа была адаптирована с веб-сайта рабочей области 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 ();
            }
        }
    }
}
person Sonny    schedule 26.09.2012

Существует программа с открытым исходным кодом под названием Hindsight (https://github.com/obsidianforensics/hindsight), которая анализирует история посещений в Chrome. Хотя программа довольно большая и сложная, она обращается к различным файлам 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

Есть еще много SQL-запросов для разных баз данных Chrome, а также для разных версий Chrome.

person Ryan    schedule 19.11.2015

Я знаю, что Safari использует двоичные списки PL для своей истории (и SQLite для своего кеша). Возможно ли, что Chrome делает то же самое?

person Frank Krueger    schedule 01.04.2010