Firefox只清除某些指定的瀏覽紀錄



大概是好幾年前,那時還沒有強制禁用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

完整的程式碼如下:

在 node.js 環境下執行即會清除指定的紀錄了

小提醒

  1. 記得先備份書籤:我曾經執行後發現書籤有些東西被我刪掉了,還好我執行前有備份過,等我找到原因再來修正吧
  2. 執行前可以先把DELETE改成SELECT count(1),這樣會印出總共有幾筆資料,方便粗略評估是否有下錯條件

後記

當然,你可以打開你的瀏覽紀錄一筆一筆刪除,但這樣的問題是十分沒有效率。
我個人使用上的感覺是如果你大概手動選擇個 300 筆左右的紀錄按刪除,火狐就會卡死沒有回應一陣子了,猜測是執行刪除指令執行了 300 次,產生 N+1 Query 問題

補充: What is the “N+1 selects problem” in ORM

所以進瀏覽紀錄慢慢篩選慢慢刪肯定不是好辦法。
但如果真要討論好方法,或許把這段程式碼改寫成擴充套件才是真正的好方法吧。

Hi 喜歡這篇文章的話 可以按個讚或請我喝杯咖啡
Buy me a coffeeBuy me a coffee