我正在创建一个需要访问chrome历史记录的应用程序,但是每当我尝试与该历史记录数据库连接时,都会出现以下错误:
c.execute(sql)
sqlite3.OperationalError:数据库已锁定
下面是代码:
`data_path = os.path.expanduser('~')+"/AppData/Local/Google/Chrome/User Data/Default"
files = os.listdir(data_path)
history_db = os.path.join(data_path, 'history')
conn = sqlite3.connect(history_db)
c = conn.cursor()
sql = "SELECT url FROM urls"
c.execute(sql)`
答案 0 :(得分:0)
c.execute(sql)sqlite3.OperationalError:数据库已锁定
当sqlite3
正在运行时尝试访问db
chrome
时,会发生此错误。您应该在访问db
之前将其关闭。
答案 1 :(得分:0)
使用Chrome时数据库被锁定,但是您始终可以复制“历史记录”文件并使用副本。 例如:
BOOL SG_GetSpecialFolderPath(LPWSTR pszPath, int csidl)
{
bool result = FALSE;
result = SHGetSpecialFolderPath(0, pszPath, csidl, 0);
wprintf(L"Special folder found %d %s\n", csidl, pszPath);
return result;
}
bool GetChromeHistory(SGBrowserHistoryArray *history, CString FileName,CString SearchString)
{
bool result = false;
WCHAR szPath[MAX_PATH];
SG_GetSpecialFolderPath(szPath, CSIDL_LOCAL_APPDATA);
StrCat(szPath, CHROMEHISTORY);
WCHAR filename[MAX_PATH + 1] = { TEMP_DB_NAME };
if (CopyFile(szPath, filename, FALSE))
{
if (GetFileAttributes(filename) != 0xFFFFFFFF)
{
}
else
{
wprintf(L"Error: Cannot find login data for Google Chrome browser\r\n");
}
// Here you should access the copy of the database
}
return result;
}
另请参阅:https://www.codeproject.com/Articles/5119331/Fetch-and-search-your-Chrome-history