Desidero scrivere un programma semplice che mostri la mia attività su Internet per un periodo di tempo (quale sito ho visitato, quante volte e così via). Principalmente uso il browser Google Chrome. Ho scoperto che Chrome memorizza la cronologia del browser in questo percorso: C: \ Documents and Settings \\ Impostazioni locali \ Dati applicazioni \ Google \ Chrome \ Dati utente \ Predefinito (correggimi se ho torto). Come posso aprire i file di cronologia? Non hanno alcuna estensione di file. Non potevo aprire usando il blocco note, il browser SQLite. Come posso accedere a questi dati a livello di programmazione? Voglio sapere quale formato di file è e come leggerlo usando un linguaggio di programmazione come C#.Come accedere alla cronologia del browser Google Chrome a livello di programmazione sul computer locale
risposta
È solo un database SQlite 3, sono riuscito ad aprirlo correttamente (anche se ovviamente non è possibile aprire un database bloccato di un browser in esecuzione).
So che Safari utilizza Binary PLists per la sua cronologia (e SQLite per la sua cache). È possibile che Chrome stia facendo lo stesso?
Per la visualizzazione di database SQLite (che è l'indice della cronologia di Chromium), ho preferito sqlitebrowser. È gratuito e funziona su Windows, Mac e Linux. Un favoloso di tutti i tempi per me.
Ecco una classe che ho creato per leggere i dati di navigazione da Google Chrome. La maggior parte del codice che ho ricevuto da here ma l'ho ottimizzato per aggiungere il supporto per Google Chrome. Probabilmente vorrai anche scaricare SQLite per .Net da here e aggiungere i riferimenti a 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;
}
}
La classe per 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;
}
}
ha funzionato come un fascino per me. Spero che aiuti
Poiché il poster originale ha chiesto un programma semplice, eccolo. Il programma è stato adattato dal sito web di java workspace (come accreditato nel codice). Sarà necessario modificare l'argomento per getConnection()
in modo che punti dove risiedono i file di cronologia sul computer. Il programma viene compilato e gira su mio ambiente 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();
}
}
}
}
c'è un programma open source chiamato Hindsight (https://github.com/obsidianforensics/hindsight) che analizza la cronologia di navigazione in Chrome. Mentre il programma è piuttosto ampio e complicato, accede ai vari file SQLite di Chrome utilizzando query SQL, che possono essere estratte e utilizzate indipendentemente, sia in un browser SQLite che in un programma diverso.
Un esempio di uno per la V30 Chrome + database di storia è:
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
ci sono molte altre query SQL per le diverse banche dati Chrome, così come diverse versioni di Chrome.
- 1. Convalida HTML sul computer locale
- 2. di accesso a livello di programmazione di Google Chrome segnalibri
- 3. Come aggiornare un browser a livello di programmazione
- 4. Come accedere alle impostazioni del dispositivo a livello di programmazione?
- 5. Come installare un'estensione Chrome a livello di programmazione?
- 6. Come avviare DynamoDB locale a livello di programmazione?
- 7. Server PHP sul computer locale?
- 8. Come ottenere il codice sorgente del browser Google Chrome?
- 9. Elenco delle schede del browser aperte a livello di codice
- 10. Accedi alla cronologia chat di Google Talk
- 11. Impostazione locale dell'applicazione a pt_BR a livello di programmazione
- 12. Estensione Chrome di Google: archiviazione locale
- 13. Come accedere a livello di programmazione nel forum phpBB?
- 14. Come accedere a livello di programmazione ai promemoria?
- 15. rinominare il computer a livello di programmazione C# .net
- 16. Duplica le risposte del modulo a due Fogli Google a livello di programmazione
- 17. Come eseguire il debug del browser nativo di Android (non di Chrome) su un computer desktop?
- 18. Come impedire a Chrome di accedere alla modalità di debug?
- 19. Determinare a livello di programmazione tramite il browser?
- 20. Dove viene salvata la memoria locale di Google Chrome?
- 21. Come accedere ai file IndexedDB/LevelDB di Google Chrome?
- 22. Come disattivare a livello di programmazione WiFi sul dispositivo Android?
- 23. Mimare la 'lentezza' del server Web sul computer locale
- 24. avvia Google Signin senza GIDSignInButton ma a livello di programmazione
- 25. Documento pronti presentazione e cronologia del browser
- 26. Percorso UNC a una cartella sul computer locale
- 27. Supporto estensione browser in Google Chrome sul cellulare
- 28. Rilevamento estensioni browser Google Chrome
- 29. Disinstallare l'applicazione silverlight fuori dal browser a livello di programmazione
- 30. Come disabilitare SparkUI a livello di programmazione?
Cosa hai usato per aprirlo con successo? – Arjang
@Arjang Un client sqlite3, ovviamente – wRAR
Grazie per la risposta – Arjang