我经常在浏览器中打开很多选项卡,有时我需要重新启动计算机,并且不想丢失打开的选项卡。因此,我开始研究一个小项目,以保存浏览器中当前打开的选项卡的网址,然后恢复它们。我使用 Firefox 作为默认浏览器,并设法编写了一个简单的 shell 脚本和一个更简单的 Python 脚本,它们组合起来允许我保存和恢复选项卡。 bash 脚本是:
#!/bin/bash
check_dependecies() {
if ! pip freeze | grep -q lz4 ;then
pip install lz4 --break-system-packages
fi
}
save_pages() {
if [[ $1 == 'firefox' ]];then
export opentabs=$(find ~/ -name "recovery.jsonlz4" -type f);
export browser='firefox';
else
echo "We don't have support for this browser yet."
exit 1
fi
python3 amanuensis.py
}
restore_pages() {
if [[ $1 == 'firefox' ]]; then
while read -r line; do
firefox -new-tab "$line" 2>/dev/null &
sleep 1
done < "saved_urls.txt"
elif [[ $1 == 'chrome' ]]; then
while read -r line; do
google-chrome "$line" 2>/dev/null &
sleep 1
done < "saved_urls.txt"
else
echo "We don't have support for this browser yet."
fi
}
check_dependecies
if [[ $# -lt 2 ]];then
echo "Missing arguments. Usage: ./amanuensis.sh [mode] [browser]"
echo "mode: 'save' for saving the urls | 'restore' to restore tabs"
echo "browser: 'firefox' | 'chrome'"
exit 1
elif [[ $1 == 'save' ]];then
save_pages $2
elif [[ $1 == 'restore' ]];then
restore_pages $2
else
echo "Invalid input"
fi
Python脚本是:
import os, json, lz4.block
f = open(os.environ['opentabs'], 'rb')
browser = os.environ['browser']
print(browser)
magic = f.read(8)
jdata = json.loads(lz4.block.decompress(f.read()).decode('utf-8'))
f.close()
with open(f'saved_urls.txt', 'w') as file:
for win in jdata['windows']:
for tab in win['tabs']:
i = int(tab['index']) - 1
urls = tab['entries'][i]['url']
file.write(f'{urls}\n')
print(urls)
这不是一个写得很好的代码,但它可以完成工作。
我向我的几个朋友展示了我的项目,他们问我是否可以实现一个与 Chrome 一起使用的版本。问题是:我可以在 Chrome 上恢复 url,但无法保存 Chrome 本身的 url。使用 Firefox,我可以从
recovery.jsonlz4
获取内容,但我找不到 Chrome 的等效内容。
任何人都可以帮我找到这个问题的解决方案吗? Chrome 中是否有 Firefox
recovery.jsonlz4
的等效文件?如果没有,我怎样才能获取当前打开的选项卡的网址?考虑到这是一个 CLI 应用程序,我不想使用 Selenium 或 PyAutoGUI...
提前致谢!
这个问题解决了吗?