Keluaran URL tab firefox terbuka di terminal

17

Saya ingin mengetahui URL dari tab firefox yang saat ini dibuka dengan perintah terminal. Apakah ada kemungkinan?

Dengan cara ini saya bisa menulisnya ke dalam file teks dan melihatnya nanti; dan sumber daya yang aman (saya sering memiliki banyak tab terbuka). Saya tahu bahwa ada add-on untuk firefox, tetapi saya akan lebih nyaman menulis skrip saya sendiri.

aldorado
sumber

Jawaban:

8

URL yang saat ini terbuka dari tab Firefox yang dibuka disimpan dalam sessionstore.jsfile yang terletak di suatu tempat di $HOME/.mozilla/firefox/XXXXXXXX.defaultdirektori.

Jadi, Anda bisa mulai dari yang seperti ini:

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

Menggunakan catkami dapat menampilkan file itu, dan dengan bantuan sed, egrepdan cutkami hanya memilih URL dari tab Firefox yang dibuka dari file itu.

Radu Rădeanu
sumber
Kutipan ganda diperlukan untuk egreppola di zsh. Selain itu, tip yang bagus, terima kasih :)
moon.musick
1
Apakah Anda ingin menjelaskan dalam beberapa kata bagaimana perintah ini bekerja? Seperti yang saya dapatkan itu seperti: mendapatkan konten dari sessionstore.js, pipa ke operasi untuk menggantikan \ "dengan \ n dan pipa ke operasi untuk mendapatkan semua baris yang dimulai dengan http? Apakah itu benar? Apa gunanya mengganti \ "?
aldorado
1
@aldorado ini menampilkan konten sessionstore.jsfile, kemudian menggantikan kejadian "dengan \n(baris baru) dan kemudian memfilter hanya baris yang berisi httpatau https. Coba
tampilkan
2
Dalam file sessionstore.jstersebut tidak hanya ada alamat tab yang terbuka. Ada banyak alamat lain.
Nicolas Barbulesco
1
Jawaban ini menggunakan file sessionstore.jsFirefox. Masalahnya adalah bahwa file ini terkenal kehilangan tab. Yang saya inginkan di sini adalah solusi paralel, menanyakan pada Firefox apa tab-nya. Seperti di AppleScript.
Nicolas Barbulesco
5

Informasi itu disimpan dalam $ HOME / .mozilla / firefox / * default / sessionstore.js dan formatnya json.

Contoh berikut dibuat untuk bekerja dengan PHP. Itu berjalan semua windows firefox, semua tab dan mendapatkan informasi yang relevan yang merupakan entri terakhir di dalam "entri". Jika kita bisa menggunakan xpath untuk menguraikannya, itu akan menjadi seperti: / windows / * / tabs / last () / url (pengetahuan xpath saya berkarat).

Anda dapat menyalin / menempelkan kode ini ke 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 : Dengan perl (tetapi pertama-tama, 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
sumber
Jawaban ini menggunakan file sessionstore.jsFirefox. Masalahnya adalah bahwa file ini terkenal kehilangan tab. Yang saya inginkan di sini adalah solusi paralel, menanyakan pada Firefox apa tab-nya. Seperti di AppleScript.
Nicolas Barbulesco
Apa yang Anda maksud dengan "kehilangan tab"? Saat ini saya menjalankan Firefox dengan 5 tab dan saya melihat 5 tab ini saat menjalankan skrip ini. Solusi ini berjalan di semua jendela dan semua tab di setiap jendela.
Hugo Vieira
Maksud saya ini .
Nicolas Barbulesco
Pertanyaan yang diposting oleh aldorado: (...) cari tahu URL dari tab firefox yang saat ini dibuka (...). Anda berbicara tentang daftar tab yang disimpan setelah mematikan firefox. Juga, bug itu sepertinya tidak terlalu terkenal ...
Hugo Vieira
1
Saya telah menguji kedua metode untuk recovery.js-file dengan 9 windows dan 840 tab dan mereka bekerja seperti pesona! - tepat setelah memipet output ke file teks saya harus mengatur peta karakter ke ISO-8859-15 untuk file metode perl ...!
DJCrashdummy
0

Ini adalah bagaimana Anda dapat mengekstrak URL saat ini dari tab paling depan / paling aktif di 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"];'

Penjelasan: Pertama, ia menemukan indeks tab aktif $tindexdan kemudian indeks entri riwayat aktif di tab ini $eindex.

Setiap 15 detik, Firefox membuat cadangan di *default/sessionstore-backups/recovery.js.

Lenar Hoyt
sumber
1
php5-cli perlu diinstal agar ini berfungsi, bisakah Anda menambahkannya ke jawaban Anda untuk meningkatkan. Apakah ada cara untuk mengambil semua url tab bukan hanya bagian depan? seperti OP bertanya.
damien
Saya mengetahui ketidakcocokan pertanyaan dan jawaban saya, namun Google akan mengarahkan Anda ke sini jika Anda mencari informasi dalam jawaban saya.
Lenar Hoyt
0

Menggunakan bash saya menemukan jawaban berikut. Ini hanya membutuhkan paket: jq. Itu dapat diinstal dengan: apt-get install jq

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

Andras Mitzki
sumber