URL de sortie des onglets Firefox ouverts dans le terminal

17

Je voudrais connaître les URL des onglets Firefox actuellement ouverts avec une commande de terminal. Y a-t-il une possibilité?

De cette façon, je serais en mesure de les écrire dans un fichier texte et de les regarder plus tard; et des ressources sûres (j'ai souvent de nombreux onglets ouverts). Je sais qu'il existe un module complémentaire pour Firefox, mais je serais plus à l'aise d'écrire mon propre script.

aldorado
la source

Réponses:

8

Les URL actuellement ouvertes des onglets Firefox ouverts sont stockées dans un sessionstore.jsfichier situé quelque part dans le $HOME/.mozilla/firefox/XXXXXXXX.defaultrépertoire.

Vous pouvez donc partir de quelque chose comme ceci:

cat $HOME/.mozilla/firefox/*default/sessionstore.js | sed "s/{/\n/g" | egrep -o '"url".*"scroll"' | cut -d\" -f4

En utilisant, catnous pouvons afficher ce fichier, et avec l'aide de sed, egrepet cutnous ne sélectionnons que les URL des onglets Firefox ouverts dans ce fichier.

Radu Rădeanu
la source
Des guillemets doubles sont nécessaires pour le egrepmotif dans zsh. A part ça, bon conseil, merci :)
moon.musick
1
Souhaitez-vous décrire en quelques mots le fonctionnement de cette commande? Comme je le comprends, c'est comme: obtenir le contenu de sessionstore.js, diriger vers une opération pour remplacer \ "par \ n et diriger vers une opération pour obtenir toutes les lignes commençant par http? Est-ce exact? Quelle est l'utilisation de remplacer \ "?
aldorado
1
@aldorado, il affiche le contenu du sessionstore.jsfichier, puis remplace les occurrences de "avec \n(une nouvelle ligne), puis filtre uniquement les lignes contenant httpou https. Essayez d'afficher le fichier et vous saurez pourquoi il a besoin de nouvelles lignes :)
moon.musick
2
Dans le fichier, sessionstore.jsil n'y a pas que les adresses des onglets ouverts. Il existe de nombreuses autres adresses.
Nicolas Barbulesco
1
Cette réponse utilise le fichier sessionstore.jsde Firefox. Le problème est que ce fichier perd notoirement des onglets. Ce que je veux ici, c'est une solution parallèle, demandant à Firefox quels sont ses onglets. Comme dans AppleScript.
Nicolas Barbulesco
5

Ces informations sont stockées dans $ HOME / .mozilla / firefox / * default / sessionstore.js et son format est json.

L'exemple suivant a été conçu pour fonctionner avec PHP. Il parcourt toutes les fenêtres de Firefox, tous les onglets et obtient les informations pertinentes qui sont la dernière entrée à l'intérieur des "entrées". Si nous pouvions utiliser xpath pour l'analyser, ce serait quelque chose comme: / windows / * / tabs / last () / url (ma connaissance de xpath est rouillée).

Vous pouvez copier / coller ce code sur un terminal:

cat $HOME/.mozilla/firefox/*default/sessionstore.js | php -r '
$json=json_decode(fgets(STDIN), TRUE);
foreach($json["windows"] as $w)
foreach($w["tabs"] as $t)
echo end($t["entries"])["url"]."\n";'

EDIT : Avec perl (mais d'abord, sudo apt-get install libjson-pp-perl):

cat $HOME/.mozilla/firefox/*default/sessionstore.js | perl -e '
use JSON qw( decode_json );
my $json = decode_json(<STDIN>);
foreach my $w ( @{$json->{"windows"}} ) {
    foreach my $t ( @{$w->{"tabs"}} ) {
        print $t->{"entries"}[-1]->{"url"}."\n";
    }
}'
Hugo Vieira
la source
Cette réponse utilise le fichier sessionstore.jsde Firefox. Le problème est que ce fichier perd notoirement des onglets. Ce que je veux ici, c'est une solution parallèle, demandant à Firefox quels sont ses onglets. Comme dans AppleScript.
Nicolas Barbulesco
Qu'entendez-vous par «perd des onglets»? J'utilise actuellement Firefox avec 5 onglets et je vois ces 5 onglets lors de l'exécution de ces scripts. Cette solution parcourt toutes les fenêtres et tous les onglets de chaque fenêtre.
Hugo Vieira
Je veux dire ça .
Nicolas Barbulesco
La question posée par aldorado: (...) découvrez les URL des onglets firefox actuellement ouverts (...). Vous parlez de lister les onglets qui ont été enregistrés après l'arrêt de Firefox. De plus, ce bug ne semble pas si notoire ...
Hugo Vieira
1
J'ai testé les deux méthodes pour le recovery.jsfichier avec 9 fenêtres et 840 onglets et elles ont fonctionné comme un charme! - juste après avoir canalisé la sortie dans un fichier texte, j'ai dû définir la carte de caractères sur ISO-8859-15 pour le fichier de la méthode perl ...!
DJCrashdummy
0

Voici comment extraire l'URL actuelle de l'onglet le plus en avant / actif dans Firefox:

cat recovery.js | php -r '$json=json_decode(fgets(STDIN), TRUE); $tindex = $json["windows"][0]["selected"]-1; $eindex = $json["windows"][0]["tabs"][$tindex]["index"]-1; echo $json["windows"][0]["tabs"][$tindex]["entries"][$eindex]["url"];'

Explication: Tout d'abord, il trouve l'index de l'onglet actif $tindex, puis l'index de l'entrée d'historique active dans cet onglet $eindex.

Toutes les 15 secondes, Firefox crée une sauvegarde *default/sessionstore-backups/recovery.js.

Lenar Hoyt
la source
1
php5-cli doit être installé pour que cela fonctionne, pourriez-vous ajouter cela à votre réponse pour l'améliorer. Existe-t-il un moyen de saisir toutes les URL des onglets, pas seulement l'avant? comme le demande l'OP.
damien
Je suis conscient de l'inadéquation de la question et de ma réponse, mais Google vous dirigera ici si vous recherchez les informations dans ma réponse.
Lenar Hoyt
0

En utilisant bash, j'ai trouvé la réponse suivante. Il ne nécessite que le package: jq. Il peut être installé avec: apt-get install jq

jq '.windows[].tabs[].entries[].url' ~/.mozilla/firefox/xkxwaf4z.default/sessionstore-backups/recovery.js

Andras Mitzki
la source