我想寫一個簡單的程序,顯示一段時間內(我訪問過哪個網站,我訪問了多少次,等等)的互聯網活動。我主要使用Google Chrome瀏覽器。我發現Chrome在這個位置存儲了瀏覽器歷史記錄 - C:\ Documents and Settings \\ Local Settings \ Application Data \ Google \ Chrome \ User Data \ Default(如果我錯了,請糾正我)。我如何打開歷史文件?他們沒有任何文件擴展名。我無法打開使用記事本,SQLite瀏覽器。如何以編程方式訪問此數據?我想知道它是哪種文件格式,以及如何使用C#等編程語言來讀取它。如何在本地機器上以編程方式訪問Google Chrome瀏覽器歷史記錄
24
A
回答
14
它只是一個SQlite 3數據庫,我能夠成功打開它(當然,您無法打開正在運行的瀏覽器的鎖定數據庫)。
0
我知道Safari使用Binary PLists作爲它的歷史(和SQLite的緩存)。 Chrome是否可以做同樣的事情?
5
對於查看sqlite數據庫(這是鉻歷史指數是什麼),我更喜歡sqlitebrowser。它是免費的,適用於Windows,Mac和Linux。對我來說,這是一個全天候的時刻。
7
這是我創建的一個類,用於從Google Chrome中讀取瀏覽數據。我從here獲得的大部分代碼,但是我調整了它以增加對Google Chrome的支持。您可能還想從here下載用於.Net的SQLite,並添加對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;
}
}
它的工作對我來說就像魅力。希望它有幫助
2
由於原來的海報要求一個簡單的程序,在這裏。該程序是從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();
}
}
}
}
2
有(https://github.com/obsidianforensics/hindsight)稱爲事後一個開放源碼的程序,分析在Chrome瀏覽歷史記錄。雖然該程序相當龐大且複雜,但它使用SQL查詢來訪問各種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
有針對不同的Chrome數據庫更多的SQL查詢,以及不同版本的Chrome。
相關問題
- 1. 以編程方式訪問瀏覽器歷史記錄
- 2. 以編程方式訪問谷歌瀏覽器歷史記錄
- 3. 以編程方式清除Chrome瀏覽器歷史記錄
- 4. 以編程方式查找Chrome瀏覽器歷史記錄
- 5. 如何通過編程訪問iphone瀏覽器歷史記錄
- 6. 如何以編程方式在android版本> 23上獲取瀏覽器歷史記錄?
- 7. Chrome瀏覽器是否有Bookmark ContentProvider以獲取瀏覽器歷史記錄
- 8. Android瀏覽器歷史記錄URI?
- 9. 在Silverlight中訪問瀏覽器歷史記錄
- 10. 瀏覽器歷史記錄管理
- 11. Phonegap Cordova瀏覽器歷史記錄
- 12. 如何在java腳本中更改瀏覽器歷史記錄
- 13. 如何閱讀Android手機中的瀏覽器歷史記錄
- 14. 清除Android瀏覽器歷史記錄
- 15. 如何以編程方式檢索Safari的完整瀏覽歷史記錄?
- 16. 讀取瀏覽器歷史記錄
- 17. 瀏覽器歷史記錄或CSS
- 18. 刪除瀏覽器歷史記錄
- 19. smartgwt瀏覽器歷史記錄
- 20. Ajax +瀏覽器歷史記錄
- 21. javascript中的瀏覽器歷史記錄
- 22. pushState加擾瀏覽器歷史記錄
- 23. JQuery simplePagination.js瀏覽器歷史記錄
- 24. 清除瀏覽器歷史記錄
- 25. Grails的瀏覽器歷史記錄?
- 26. 清除CefGlue瀏覽器歷史記錄
- 27. ExtJS MVC的瀏覽器歷史記錄
- 28. Angular2瀏覽器歷史記錄導航
- 29. 如何使用歷史記錄類來處理瀏覽器歷史記錄
- 30. 以編程方式訪問TFS歷史
你用什麼來成功打開它? – Arjang 2015-12-16 00:05:52
@Arjang一個sqlite3客戶端,顯然 – wRAR 2015-12-16 05:51:46
感謝您的回答 – Arjang 2015-12-16 13:04:56