Wyjściowy adres URL otwartych kart Firefoxa w terminalu

17

Chciałbym znaleźć adresy URL aktualnie otwartych kart Firefox za pomocą polecenia terminalu. Czy jest jakaś możliwość?

W ten sposób mógłbym zapisać je do pliku tekstowego i przejrzeć je później; i bezpieczne zasoby (często mam wiele otwartych kart). Wiem, że istnieje dodatek do Firefoksa, ale wygodniej byłoby napisać własny skrypt.

Aldorado
źródło

Odpowiedzi:

8

Aktualnie otwarte adresy URL otwartych kart Firefox są przechowywane w sessionstore.jspliku, który znajduje się gdzieś w $HOME/.mozilla/firefox/XXXXXXXX.defaultkatalogu.

Możesz zacząć od czegoś takiego:

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

Korzystanie catmożemy wyświetlić ten plik, a następnie z pomocą sed, egrepa cutmy tylko wybrane adresy URL otwartych zakładek Firefoksa z tego pliku.

Radu Rădeanu
źródło
Dla egrepwzoru w potrzebne są podwójne cudzysłowy zsh. Poza tym fajna wskazówka, dziękuję :)
moon.musick 28.08.13
1
Czy chcesz opisać w kilku słowach, jak to polecenie działa? Gdy to rozumiem, wygląda to tak: pobierz zawartość pliku sessionstore.js, potokuj do operacji, aby zastąpić \ "przez \ n i potokuj do operacji, aby uzyskać wszystkie wiersze zaczynające się na http? Czy to prawda? Jaki jest pożytek z zastępuje \ "?
aldorado
1
@aldorado wyświetla zawartość sessionstore.jspliku, a następnie zastępuje wystąpień "z \n(nowa linia), a następnie filtruje tylko linie zawierające httplub https. Spróbuj wyświetlić plik, a dowiesz się, dlaczego potrzebuje nowych linii :)
moon.musick
2
W pliku sessionstore.jsznajdują się nie tylko adresy otwartych kart. Istnieje wiele innych adresów.
Nicolas Barbulesco
1
Ta odpowiedź korzysta z pliku sessionstore.jsFirefox. Problem polega na tym, że ten plik notorycznie traci karty. Chcę tutaj równoległego rozwiązania, pytającego Firefoksa, jakie są jego zakładki. Jak w AppleScript.
Nicolas Barbulesco
5

Informacje te są przechowywane w $ HOME / .mozilla / firefox / * default / sessionstore.js, a ich format to json.

Poniższy przykład został stworzony do współpracy z PHP. Przechodzi przez wszystkie okna Firefoksa, wszystkie zakładki i otrzymuje odpowiednią informację, która jest ostatnim wpisem wewnątrz „wpisów”. Gdybyśmy mogli użyć xpath do jego parsowania, byłoby to coś w stylu: / windows / * / tabs / last () / url (moja wiedza na temat xpath jest zardzewiała).

Możesz skopiować / wkleić ten kod do terminala:

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";'

EDYCJA : Z perlem (ale najpierw 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
źródło
Ta odpowiedź korzysta z pliku sessionstore.jsFirefox. Problem polega na tym, że ten plik notorycznie traci karty. Chcę tutaj równoległego rozwiązania, pytającego Firefoksa, jakie są jego zakładki. Jak w AppleScript.
Nicolas Barbulesco
Co rozumiesz przez „przegrywa karty”? Obecnie korzystam z przeglądarki Firefox z 5 kartami i widzę te 5 kart podczas uruchamiania tych skryptów. To rozwiązanie obsługuje wszystkie okna i wszystkie karty każdego okna.
Hugo Vieira,
Mam na myśli to .
Nicolas Barbulesco
Pytanie zadane przez aldorado: (...) znaleźć adresy URL aktualnie otwartych kart Firefox (...). Mówisz o kartach list, które zostały zapisane po wyłączeniu Firefoksa. Ponadto ten błąd nie wydaje się tak znany ...
Hugo Vieira,
1
przetestowałem obie metody dla recovery.jspliku z 9 oknami i 840 kartami i działały jak urok! - tuż po potokiem wyjście do pliku tekstowego musiałem ustawić mapę znaków na ISO-8859-15 dla pliku o perl-metody ...!
DJCrashdummy
0

W ten sposób możesz wyodrębnić bieżący adres URL zakładki najbardziej aktywnej / przedniej w przeglądarce 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"];'

Objaśnienie: Najpierw znajduje indeks aktywnej karty, $tindexa następnie indeks aktywnego wpisu historii na tej karcie $eindex.

Co 15 sekund Firefox tworzy kopię zapasową *default/sessionstore-backups/recovery.js.

Lenar Hoyt
źródło
1
php5-cli musi być zainstalowany, aby to działało, czy możesz dodać to do swojej odpowiedzi, aby poprawić. Czy istnieje sposób, aby złapać wszystkie adresy URL zakładek nie tylko z przodu? tak jak prosi OP.
damien
Mam świadomość niedopasowania pytania i mojej odpowiedzi, jednak Google skieruje cię tutaj, jeśli znajdziesz informacje w mojej odpowiedzi.
Lenar Hoyt
0

Za pomocą bash znalazłem następującą odpowiedź. Wymaga tylko pakietu: jq. Można go zainstalować za pomocą: apt-get install jq

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

Andras Mitzki
źródło