Firefox只清除某些指定的瀏覽紀錄
11 Jun 2019
大概是好幾年前,那時還沒有強制禁用NPAPI,我曾經有裝個擴充套件是可以指定刪除幾天前(例如 180 天前)然後瀏覽次數低於幾次的紀錄清掃器。後來隨著禁用舊式擴充套件之後這個套件也因為沒再更新而消失了。
所以我就想說那我自己進 DB 下 SQL 總可以吧?
資料庫在哪?
首先是路徑。以 Windows 版來說,Firefox 的個人設定檔通常會在下列所示的位置:
C:/Users/YOUR_NAME/AppData/Roaming/Mozilla/Firefox/Profiles/xxx.xxx
其中YOUR_NAME
指向你的個人目錄,而後面的xxx.xxx
是一串亂碼。
進到目錄內後,./places.sqlite
就是你的瀏覽紀錄與書籤的資料庫了
開始下 SQL
操作工具
由於該資料庫使用的是 sqlite,故我選擇在 npm 上安裝sqlite3
作為我的讀寫工具
$ npm i sqlite3
語法
首先是核心的 SQL 語法
DELETE FROM moz_places
WHERE visit_count <=2 AND
last_visit_date < CAST(strftime('%s', datetime('2019-03-01')) AS INT)*1000000
visit_count
是瀏覽次數datetime
函式傳入一個YYYY-MM-DD
格式的日期,該段 where 語法會過濾出該日期之前的所有紀錄
完整的程式碼如下:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const location="C:/Users/YOUR_NAME/AppData/Roaming/Mozilla/Firefox/Profiles/xxx.xxx"; | |
var sqlite3 = require('sqlite3').verbose(); | |
var db = new sqlite3.Database(location+'/places.sqlite'); | |
db.serialize(function () { | |
db.each("DELETE FROM moz_places WHERE visit_count <=2 AND last_visit_date < CAST(strftime('%s', datetime('2019-03-01')) AS INT)*1000000", | |
function (err, row) { | |
console.log(row); | |
} | |
); | |
}); | |
db.close(); |
在 node.js 環境下執行即會清除指定的紀錄了
小提醒
- 記得先備份書籤:我曾經執行後發現書籤有些東西被我刪掉了,還好我執行前有備份過,等我找到原因再來修正吧
- 執行前可以先把
DELETE
改成SELECT count(1)
,這樣會印出總共有幾筆資料,方便粗略評估是否有下錯條件
後記
當然,你可以打開你的瀏覽紀錄一筆一筆刪除,但這樣的問題是十分沒有效率。
我個人使用上的感覺是如果你大概手動選擇個 300 筆左右的紀錄按刪除,火狐就會卡死沒有回應一陣子了,猜測是執行刪除指令執行了 300 次,產生 N+1 Query 問題
所以進瀏覽紀錄慢慢篩選慢慢刪肯定不是好辦法。
但如果真要討論好方法,或許把這段程式碼改寫成擴充套件才是真正的好方法吧。