place.sqlite 有问题吗?似乎行为异常。如何获取$LAST_VISITED_URL?

place.sqlite 有问题吗?似乎行为异常。如何获取$LAST_VISITED_URL?

我已经发布这里

这是我的last-url.sh

    #!/bin/bash
    
    rm  -rf /tmp/db.sqlite 
    cp ~/.mozilla/firefox/*.default-esr/places.sqlite /tmp/db.sqlite ;
    LAST_URL=`sqlite3 /tmp/db.sqlite "select url from moz_places order by last_visit_date desc limit 1;"`;

    echo $LAST_URL

我的脚本不断给我一个例子stackoverflow.com网址而不是youtube.com一,即使我重新加载页面。

问题隐藏在哪里?

我只有一份xxxxxx.default-esr个人资料。

截屏: 火狐历史 SQLite数据库

测试示例:“google test”是一个全新访问过的URL,其他都是刷新页面

现在我问自己 Firefox 如何创建历史选项卡(它反映了真实的历史)。它使用了哪个文件或哪个 SQL 请求? SQLite?

答案1

脚本修改

 #!/bin/bash
    
    rm  -rf /tmp/db.sqlite 
    cp ~/.mozilla/firefox/*.default-esr/places.sqlite /tmp/db.sqlite ;
    ORIG_QUERY=`select url from moz_places order by last_visit_date desc limit 1;`
    NEW_QUERY=`SELECT url FROM moz_places WHERE visited_count >=1 GROUP BY last_visit_date DESC ORDER BY id LIMIT 1
    LAST_URL=`sqlite3 /tmp/db.sqlite ${QUERY}`;
    TEST_URL=`sqlite3 /tmp/db.sqlite ${NEW_QUERY};`

    #echo $LAST_URL
    echo $TEST_URL

解释

根据问题下方的评论,OP 确保数据库不是基于 0 的。我的SQL有点生疏,但是存储的查询${NEW_QUERY}应该返回“第一行URL,无论是new( visit_count=1)还是refreshed( visit_count > 1),其中ids按日期从最大到最小分组”。换句话说:

如果您今天访问了 1,000 个页面,昨天访问了 500 个页面,并且没有限制,那么您应该会看到今天的日期下列出了 1,000 个页面,昨天的下列出了 500 个页面,并且大 ID 位于顶部。 设置 LIMIT 应返回包含任何页面刷新在内的日期id中最高的 URL。last_visited

答案2

答案的开头来自这里感谢jscher2000,但还没有解决方案

某些历史记录可能缓存在内存中,但“库”窗口显示了很多条目,因此可能会在磁盘上查找该信息。 SQLite 引擎正在从places.sqlite 文件及其日志文件构建该视图,因此它比您简单地对一个文件进行操作具有更完整的视图。

所以也许解决方案可以来自像这样的工具wal2json尝试解析places.sqlite.wal。我会尝试一下。

正如@jscher2000所说

Firefox 写入 -wal 和 -shm 文件。 ...我很困惑为什么 sqlite3 不自动处理它。 ...https://www.sqlite.org/wal.html

相关内容