在Firefox中-跨所有选项卡:如何使用浏览器外部代码列出所有打开的浏览器选项卡的所有打开URL
---
如果我打开多个选项卡,或其他带有选项卡的浏览器,然后我关闭了我的机器,或者它崩溃或我终止了所有进程(.exe(,下次我启动浏览器时,所有选项卡都将在一个浏览器窗口或多个浏览器窗口中重新打开,就像关闭前一样。
这些信息存储在哪里?具体来说,URL存储在哪里,这样才有可能?
1(当浏览器/选项卡启动并运行时,我需要通过程序访问给定配置文件的所有正在运行的浏览器的所有选项卡中当前打开的所有URL
2(是否:如果它们都关闭了(数据存储在某个文件或数据库的配置文件目录中,以便下次启动时打开所有URL(
---
我想通过bash(cygwin(、Python、Java或Rust访问所有打开或存储的URL,这是一种在机器上运行的语言,可以访问概要文件目录中的文件(在浏览器外部运行的代码(。
如果我打开多个选项卡,或其他带有选项卡的浏览器,然后我关闭了我的机器,或者它崩溃或我终止了所有进程(.exe(,下次我启动浏览器时,所有选项卡都将在一个浏览器窗口或多个浏览器窗口中重新打开,就像关闭前一样。
这些信息存储在哪里?具体来说,URL存储在哪里,这样才有可能?
会话恢复由sessionstore
组件执行。这里介绍了启动恢复过程的高级概述:
/**
* Session Storage and Restoration
*
* Overview
* This service reads user's session file at startup, and makes a determination
* as to whether the session should be restored. It will restore the session
* under the circumstances described below. If the auto-start Private Browsing
* mode is active, however, the session is never restored.
*
* Crash Detection
* The CrashMonitor is used to check if the final session state was successfully
* written at shutdown of the last session. If we did not reach
* 'sessionstore-final-state-write-complete', then it's assumed that the browser
* has previously crashed and we should restore the session.
*
* Forced Restarts
* In the event that a restart is required due to application update or extension
* installation, set the browser.sessionstore.resume_session_once pref to true,
* and the session will be restored the next time the browser starts.
*
* Always Resume
* This service will always resume the session if the integer pref
* browser.startup.page is set to 3.
*/
正如我们所看到的,它提到了SessionFile
。在查找该文件时,我们会看到这个定义,它表明会话信息存储在sessionstore.jsonlz4
文件中,这是一个utf-8编码的JSON文件,用lz4压缩。
不幸的是,使用的lz4压缩无法与标准工具配合使用,但关于如何在Superuser上解决这个问题,有一些很好的讨论(例如,跳过文件的前8个字节(。
另一种可能性是创建WebExtension并使用可执行文件执行本机消息传递。如果获得适当的权限,WebExtensions可以枚举打开的窗口和选项卡并获取它们的URL。
如果Firefox打开了要保存的选项卡,则这些选项卡将存储在文件sessionstore-backups/recovery.jsonlz4
(在您的配置文件中(中。
(.jsonlz4是一种Mozilla特定的格式,用于存储压缩的JSON数据。有各种方法和工具可以对其进行解压缩以获得纯JSON。例如,请参阅此问题的答案。(
如果Firefox已关闭,则上一个会话存储在文件sessionstore.json
中。(这个没有压缩(
如果您没有这两个文件(在崩溃或其他原因之后?(,则可能有sessionstore-backups/previous.jsonlz4
或sessionstore-backups/recovery.baklz4
。
下面的例子,在UbuntuLinux中,使用lz4jsoncat
将文件解压缩为普通的JSON,使用jq
对其进行解析,并列出当前在任何打开的Firefox窗口中打开的每个选项卡的标题和URL。
profile=$HOME/.mozilla/firefox/Your_Profile # <-- adapt to the path to your profile
lz4jsoncat $profile/sessionstore-backups/recovery.jsonlz4
| jq -r '.windows[] | .tabs[] | (.index - 1) as $i | .entries[$i] | .title, .url, ""'
在Debian或Ubuntu中,所需的软件包可以安装:
sudo apt install lz4json jq