Quiero escribir un programa simple que muestra mi actividad de Internet durante un período de tiempo (qué sitio visité, cuántas veces, etc.). Uso principalmente el navegador Google Chrome. Descubrí el historial del navegador de las tiendas Chrome en esta ubicación: C: \ Documents and Settings \\ Configuración local \ Datos de la aplicación \ Google \ Chrome \ User Data \ Predeterminado (corrígeme si me equivoco). ¿Cómo puedo abrir los archivos del historial? No tienen ninguna extensión de archivo. No pude abrir usando el bloc de notas, el navegador SQLite. ¿Cómo accedo a esta información programáticamente? Quiero saber qué formato de archivo es y cómo leerlo usando un lenguaje de programación como C#.Cómo acceder al historial del navegador Google Chrome programáticamente en la máquina local
Respuesta
Es solo una base de datos SQlite 3, pude abrirla con éxito (aunque, por supuesto, no se puede abrir una base de datos bloqueada de un navegador en ejecución).
Sé que Safari usa Binary PLists para su historial (y SQLite para su caché). ¿Es posible que Chrome esté haciendo lo mismo?
Para ver las bases de datos de sqlite (que es lo que es el índice de historial de Chromium), he preferido sqlitebrowser. Es gratis y funciona en Windows, Mac y Linux. Un favorito de todos los tiempos para mí.
Aquí hay una clase que he creado para leer los datos de navegación de Google Chrome. La mayor parte del código que obtuve proviene de here pero lo modifiqué para agregar soporte para Google Chrome. Probablemente también desee descargar el SQLite para .Net desde here y agregar las referencias 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 clase de la 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;
}
}
funcionó como un encanto para mí. Espero que ayude
Como el cartel original pidió un programa simple, aquí está. El programa fue adaptado del sitio web de espacio de trabajo de Java (como se acredita en el código). Tendrá que cambiar el argumento de getConnection()
para señalar dónde residen los archivos de historial en su máquina. El programa se compila y se ejecuta en mi entorno 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();
}
}
}
}
No es un programa de código abierto llamado retrospección (https://github.com/obsidianforensics/hindsight) que analiza el historial de navegación en Chrome. Si bien el programa es bastante grande y complicado, accede a varios archivos Chrome SQLite mediante consultas SQL, que pueden extraerse y usarse de forma independiente, ya sea en un navegador SQLite o en un programa diferente.
Un ejemplo de una base de datos para la historia v30 + Chrome es:
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
hay muchas más consultas SQL para bases de datos diferentes Chrome, así como diferentes versiones de Chrome.
- 1. ¿Cómo accedes al historial del navegador?
- 2. Google chrome extension: local storage
- 3. Detección de extensiones del navegador Google Chrome
- 4. Problema al acceder al método expuesto ExternalInterface en Google Chrome
- 5. ¿Cómo mantener el historial del navegador sincronizado al usar Ajax?
- 6. ¿Cómo obtener el código fuente del navegador Google Chrome?
- 7. cómo insertar la página actual en el historial del navegador
- 8. ¿Cómo puedo ver un sitio web ejecutándose en localhost en la máquina en el navegador chrome?
- 9. Integre el navegador Google Chrome en eclipse
- 10. Validar HTML en la máquina local
- 11. eliminando puntos del historial del navegador
- 12. Google Maps parpadeantes cuestión en Google navegador Chrome
- 13. Eliminar el historial del navegador usando jQuery
- 14. cómo obtener el historial del navegador en android?
- 15. ¿Cómo elimino una página del historial del navegador?
- 16. Android leer el historial del navegador
- 17. Acceda al caché de Google Chrome
- 18. ¿Cómo acceder al Avatar desde Google?
- 19. ¿Cómo acceder al servidor local WCF desde otro dispositivo?
- 20. Aplicación del navegador y acceso al sistema de archivos local
- 21. ¿Cómo funciona la geolocalización del navegador web?
- 22. Acceder al servidor local desde Internet
- 23. ¿Puedo abrir programáticamente devtools desde una extensión de Google Chrome?
- 24. ¿Cómo puedo acceder al ámbito local dinámicamente en javascript?
- 25. Almacenamiento local HTML5 y Chrome
- 26. Detectar el foco del navegador/fuera de foco a través de la Extensión de Google Chrome
- 27. ¿Cómo instalar una extensión de Chrome programáticamente?
- 28. ¿Cómo borro el caché del navegador programáticamente en el iPhone?
- 29. Cómo acceder al archivo de Cloud Storage desde la aplicación que se ejecuta en local
- 30. Deshabilitar accesos directos en Google Chrome
¿Qué usó para abrirlo con éxito? – Arjang
@Arjang Un cliente sqlite3, obviamente – wRAR
Gracias por la respuesta – Arjang