Firefox - 从命令行读取打开的选项卡的 URL

Firefox - 从命令行读取打开的选项卡的 URL

有时我会在 Firefox 中打开大量选项卡,我更喜欢将它们保存到文件中,而不是使用内置书签。

因此我(手动)复制网址about:preferences页面中,将它们保存到文件中并使用以下命令处理该文件:tr '|' '\n'在一个小 bash 脚本中。

稍后当我想重新打开时选项卡从文本文件中我运行这个小循环:

#!/bin/bash

# usage: $bash Open-tabs.sh file-with-bookmarks.txt

 while read -r line; do
     firefox -new-tab "$line" 2>/dev/null &
     sleep 2
 done < "$1"

它打开了所有选项卡延迟2秒。

我想知道是否有办法可以读出网址打开的选项卡从命令行,所以我可以将它包含到我的脚本中?

答案1

这适用于 Firefox 57+。你需要 lz4 (通过 pip)。文件头是从 的长度收集的b'mozLz40\0'。如果要在单行代码中使用文件路径,请使用环境变量,相应地替换为\n\t并合并行。

export opentabs=$(find ~/.mozilla/firefox*/*.default/sessionstore-backups/recovery.jsonlz4);

python3 <<< $'import os, json, lz4.block
f = open(os.environ["opentabs"], "rb")
magic = f.read(8)
jdata = json.loads(lz4.block.decompress(f.read()).decode("utf-8"))
f.close()
for win in jdata["windows"]:
    for tab in win["tabs"]:
        i = int(tab["index"]) - 1
        urls = tab["entries"][i]["url"]
        print(urls)'

答案2

来源(更改的文件路径):获取所有打开的标签页

此代码片段获取当前的 Firefox 选项卡 url。它使用 recovery.js[onlz4]您的配置文件文件夹中的文件。该文件几乎会立即更新,但它并不总是正确的 URL。

获取所有打开的选项卡:

python -c '
import io, json, pathlib as p
fpath = next(iter(p.Path("~/.mozilla/firefox").expanduser().glob("*.default/sessionstore-backups/recovery.js*")))
with io.open(fpath, "rb") as fd:
    if fpath.suffix == ".jsonlz4":
        import lz4.block as lz4
        fd.read(8)  # b"mozLz40\0"
        jdata = json.loads(lz4.decompress(fd.read()).decode("utf-8"))
    else:
        jdata = json.load(fd)
    for win in jdata.get("windows"):
        for tab in win.get("tabs"):
            i = tab["index"] - 1
            print(tab["entries"][i]["url"])
'

答案3

其中一些答案引用了“[随机字符].default”目录。从版本 67 开始,用户可以拥有不同更新渠道(例如,发布、测试版、夜间等)的配置文件。

在我的 Ubuntu 18 系统上,这个目录是“[random chars].default-release”。我仍然有一个“[...].default”目录,但它大部分是空的。如果您收到无法找到“sessionstore-backups”的错误,请记住这一点。

答案4

我建议使用https://github.com/balta2ar/brotab以此目的:

pip install brotab
brotab install

还要安装网络扩展:https://addons.mozilla.org/en-US/firefox/addon/brotab/

重新启动 Firefox,您就可以brotab list像这样使用和解析它:

bt list | awk -F'\t' '{
    print "Downloading "$2
    system("curl --silent --output \""$2"\" \""$3"\"")
}'

相关内容