URL đầu ra của các tab firefox mở trong thiết bị đầu cuối


17

Tôi muốn tìm ra các URL của các tab firefox hiện đang mở bằng lệnh terminal. Có khả năng nào không?

Bằng cách này tôi sẽ có thể viết chúng vào một tệp văn bản và nhìn vào chúng sau đó; và tài nguyên an toàn (tôi thường có nhiều tab mở). Tôi biết rằng có một tiện ích bổ sung cho firefox, nhưng tôi sẽ dễ hiểu hơn khi viết kịch bản của riêng tôi.

Câu trả lời:


8

Các URL hiện đang mở của các tab Firefox đã mở được lưu trữ trong sessionstore.jstệp nằm ở đâu đó trong $HOME/.mozilla/firefox/XXXXXXXX.defaultthư mục.

Vì vậy, bạn có thể bắt đầu từ một cái gì đó như thế này:

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

Sử dụng catchúng ta có thể hiển thị tập tin đó, và với sự giúp đỡ của sed, egrepcutchúng tôi chỉ chọn các URL của các tab Firefox mở từ tập tin đó.


Dấu ngoặc kép cần thiết cho egrepmẫu trong zsh. Ngoài ra, mẹo hay, cảm ơn :)
moon.musick

1
Bạn có muốn mô tả trong một vài từ cách lệnh này hoạt động không? Như tôi hiểu, nó giống như: lấy nội dung của sessionstore.js, chuyển sang một hoạt động để thay thế \ "bằng \ n và chuyển sang một hoạt động để có được tất cả các dòng bắt đầu bằng http? Có đúng không? Việc sử dụng là gì? thay thế \ "?
aldorado

1
@aldorado nó hiển thị nội dung của sessionstore.jstệp, sau đó thay thế các lần xuất hiện "bằng \n(một dòng mới) và sau đó chỉ lọc ra các dòng có chứa httphoặc https. Hãy thử hiển thị tệp và bạn sẽ biết lý do tại sao nó cần dòng mới :)
moon.musick

2
Trong tệp sessionstore.jskhông chỉ có địa chỉ của các tab đang mở. Có nhiều địa chỉ khác.
Nicolas Barbulesco

1
Câu trả lời này sử dụng tệp sessionstore.jscủa Firefox. Vấn đề là tập tin này nổi tiếng là mất các tab. Điều tôi muốn ở đây là một giải pháp song song, hỏi Firefox các tab của anh ấy là gì. Giống như trong AppleScript.
Nicolas Barbulesco

5

Thông tin đó được lưu trữ trong $ HOME / .mozilla / firefox / * default / sessionstore.js và định dạng của nó là json.

Ví dụ sau đây được thực hiện để làm việc với PHP. Nó đi qua tất cả các cửa sổ firefox, tất cả các tab và nhận thông tin liên quan là mục cuối cùng bên trong "mục". Nếu chúng ta có thể sử dụng xpath để phân tích cú pháp, nó sẽ giống như: / windows / * / tab / last () / url (kiến thức xpath của tôi bị hoen rỉ).

Bạn có thể sao chép / dán mã này vào một thiết bị đầu cuối:

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 : Với perl (nhưng trước tiên, 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";
    }
}'

Câu trả lời này sử dụng tệp sessionstore.jscủa Firefox. Vấn đề là tập tin này nổi tiếng là mất các tab. Điều tôi muốn ở đây là một giải pháp song song, hỏi Firefox các tab của anh ấy là gì. Giống như trong AppleScript.
Nicolas Barbulesco

Bạn có ý nghĩa gì khi "mất tab"? Tôi hiện đang chạy Firefox với 5 tab và tôi thấy 5 tab này khi chạy các tập lệnh này. Giải pháp này đi bộ tất cả các cửa sổ và tất cả các tab của mỗi cửa sổ.
Hugo Vieira

Ý tôi là này .
Nicolas Barbulesco

Câu hỏi được đăng bởi aldorado: (...) tìm ra các URL của các tab firefox hiện đang mở (...). Bạn đang nói về các tab liệt kê đã được lưu sau khi tắt firefox. Ngoài ra, con bọ đó dường như không nổi tiếng ...
Hugo Vieira

1
Tôi đã thử nghiệm cả hai phương pháp cho recovery.js-file với 9 cửa sổ và 840 tab và chúng hoạt động như một bùa mê! - ngay sau khi chuyển đầu ra thành tệp văn bản, tôi phải đặt sơ đồ ký tự thành ISO-8859-15 cho tệp của phương thức perl ...!
DJCrashdummy

0

Đây là cách bạn có thể trích xuất URL hiện tại của tab front-most / active trong 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"];'

Giải thích: Đầu tiên, nó tìm thấy chỉ mục của tab hoạt động $tindexvà sau đó là chỉ mục của mục lịch sử hoạt động trong tab này $eindex.

Cứ sau 15 giây Firefox lại tạo một bản sao lưu *default/sessionstore-backups/recovery.js.


1
php5-cli cần được cài đặt để nó hoạt động, bạn có thể thêm nó vào câu trả lời của mình để cải thiện. Có cách nào để lấy tất cả các url không chỉ phía trước nhất không? như OP yêu cầu.
damien

Tôi biết về sự không phù hợp của câu hỏi và câu trả lời của tôi, tuy nhiên Google sẽ hướng dẫn bạn đến đây nếu bạn tìm kiếm thông tin trong câu trả lời của tôi.
Lenar Hoyt

0

Sử dụng bash tôi tìm thấy câu trả lời sau đây. Nó chỉ yêu cầu gói: jq. Nó có thể được cài đặt với: apt-get install jq

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.