Firefox - Auslesen von URLs geöffneter Registerkarten über die Befehlszeile

8

Manchmal sind in Firefox eine ganze Reihe von Registerkarten geöffnet, und ich bevorzuge es, sie in einer Datei zu speichern, anstatt die integrierten Lesezeichen zu verwenden.

Deshalb kopiere ich die URLs (manuell) von der about:preferencesSeite, speichere sie in einer Datei und verarbeite die Datei mit: tr '|' '\n'in einem kleinen Bash-Skript.

Wenn ich später die Registerkarten aus der Textdatei wieder öffnen möchte, führe ich diese kleine Schleife aus:

#!/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"

und es öffnet alle Registerkarten mit einer Verzögerung von 2 Sekunden.

Ich möchte wissen, ob es eine Möglichkeit gibt, die URLs der geöffneten Registerkarten über die Befehlszeile auszulesen , damit ich sie in mein Skript aufnehmen kann.

nath
quelle

Antworten:

5

Quelle (geänderter Dateipfad): Holen Sie sich alle geöffneten Registerkarten

Dieses Snippet ruft die aktuellen URLs der Firefox-Registerkarte ab. Es verwendet die Datei recovery.js in Ihrem Profilordner. Diese Datei wird fast sofort aktualisiert, es wird jedoch nicht immer die richtige URL sein.

Holen Sie sich alle offenen Registerkarten:

python2 <<< $'import json\nf = open("/home/<username>/.mozilla/firefox/<name of the random stringed folder>.default/sessionstore-backups/recovery.js", "r")\njdata = json.loads(f.read())\nf.close()\nfor win in jdata.get("windows"):\n\tfor tab in win.get("tabs"):\n\t\ti = tab.get("index") - 1\n\t\tprint tab.get("entries")[i].get("url")'
Hunter.S.Thompson
quelle
ist es möglich, der Pfad auf Debian ist ~/.mozilla/firefox/*.default/sessionstore-backups/recovery.js?
nath
Ja, tut mir leid, ich habe die Frage damit bearbeitet, aber ich habe die sessionrestore-backups vor recovery.js vergessen. Vielen Dank für den Hinweis. Bearbeitete Antwort
Hunter.S.Thompson
Ich bekomme immer Traceback (most recent call last): File "<stdin>", line 2, in <module> IOError: [Errno 2] No such file or directory: '~/.mozilla/firefox/*.default/sessionstore-backups/recovery.js'mit, catich kann die Datei lesen ...
nath
Ich habe die Antwort bearbeitet. Kopieren Sie es und fügen Sie es ein. Fügen Sie jedoch anstelle von <Benutzername> Ihren Benutzernamen hinzu.
Hunter.S.Thompson
Python versteht die ~/Syntax wahrscheinlich nicht /home/<username>.
Hunter.S.Thompson
8

Dies funktioniert für Firefox 57+. Du brauchst lz4 (via pip). Der Dateikopf wird aus der Länge von gesammelt b'mozLz40\0'. Verwenden Sie eine Umgebungsvariable für den Dateipfad, wenn Sie ihn in einem Oneliner verwenden möchten, ersetzen Sie ihn durch \nund \tentsprechend und führen Sie Zeilen zusammen.

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.get("windows"):
    for tab in win.get("tabs"):
        i = int(tab.get("index")) - 1
        urls = tab.get("entries")[i].get("url")
        print(urls)'
wbob
quelle
Um die neueste benötigte Datei von Firefox zu erhalten:export opentabs=$(ls -t ~/.mozilla/firefox*/*/sessionstore-backups/recovery.jsonlz4 | sed q)
Gilles Quenot
Kannst du das erklären magic = f.read(8)? Sie verwenden magicvar später nicht mehr.
Gilles Quenot
1
Die ersten 8 Bytes in recovery.jsonlz4 sind Teil des benutzerdefinierten Mozillas-Dateiformats. Wenn Sie die Länge der zu lesenden Magie (8) übergeben, wird das nächste read () in json.loads nach dem Header fortgesetzt , sodass es sich um einen gültigen dekomprimierbaren lz4-Stream handelt . Weitere Informationen zur Auswahl eines benutzerdefinierten Dateikopfs finden Sie in diesem Github- Gist , der auf die entsprechende Firefox-Quelle verweist .
wbob
@wbob Jetzt verstehe ich UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf2 in position 12: invalid continuation byte, kannst du helfen?
SebMa
@Sebma Ich habe auf lz4 2.0.0 aktualisiert und auch den Fehler bekommen, deine Bearbeitung hat ihn behoben, danke. Ich ging voran und führte die
Modulimporte zusammen
1

Einige dieser Antworten verweisen auf das Verzeichnis "[zufällige Zeichen] .default". Ab Version 67 können Benutzer Profile für verschiedene Update-Kanäle haben (z. B. Release, Beta, Nightly usw.).

Auf meinem Ubuntu 18-System war dieses Verzeichnis "[zufällige Zeichen] .default-release". Ich hatte immer noch ein "[...]. Standard" -Verzeichnis, aber es war größtenteils leer. Denken Sie daran, wenn Sie die Fehlermeldung erhalten, dass "Sessionstore-Backups" nicht gefunden werden können.

LousyG
quelle