Как получить URL с вкладки Firefox из терминала?

Есть ли способ получить такой URL, используя какие-то команды?

4 ответа

Решение

Есть несколько файлов, которые содержат информацию о ваших сессиях:

  • ~/.mozilla/firefox/*.default/sessionstore-backups/recovery.js который содержит информацию о текущем сеансе, также содержит информацию о закрытых вкладках и предыдущем сеансе. Каждые 15 секунд Firefox создает резервную копию в этом файле. Этот файл недоступен, когда Firefox закрыт.

  • ~/.mozilla/firefox/*.default/sessionstore.js который содержит информацию о последней сессии, когда браузер Firefox закрыт. Этот файл недоступен, когда открыт Firefox.

  • ~/.mozilla/firefox/*.default/sessionstore-backups/previous.js который содержит информацию о предыдущем сеансе.

Анализ содержания recovery.js показывает, что для каждой вкладки только записи текущего URL содержат строку attributes,


I. Когда Firefox открыт:

1.а Если вы хотите получить все URL открытых вкладок из текущего сеанса, вы можете использовать эту команду:

cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs.*//" | \
sed "s/{/\n{/g" | \
egrep -o 'url.*attributes' | \
cut -d\" -f3

* Обратите внимание, что вы должны copy / paste все линии вместе в окно терминала и нажмите Enter.

Куда:

  • cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js распечатает содержимое этого файла;
  • sed "s/\\_closedTabs.*//" удалит все после строки _closedTabs;
  • sed "s/{/\n{/g" | \ поставит новую строку перед каждым {;
  • egrep -o 'url.*attributes' будет фильтровать только те части строк, которые начинаются с url и заканчивается attributes, Без -o опция, все строки, которые содержат строку, будут отфильтрованы;
  • cut -d\" -f3 буду использовать " в качестве разделителя и будет фильтровать только 3-й столбец.

В моем случае вывод команды:

https://Ask-ubuntu.ru/
https://www.mozilla.org/en-US/

1.b. Если вы хотите получить данные для текущего и предыдущего сеанса сразу, вы можете использовать это:

printf "\n# CurrentSession:\n"; \
cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs/\{\"url\":\"# ClosedTabs:\"attributes/g" | \
sed "s/\\lastSessionState/\{\"url\":\"# LastSession:\"attributes/" | \
sed "s/{/\n{/g" | \
egrep -o 'url":"*.*attributes*' | \
cut -d\" -f3 | \
sed "s/#/\n#/" \
; echo

Куда:

  • printf "\n# CurrentSession:\n"; распечатает # CurrentSession: между двумя переводами строки;
  • sed "s/\\_closedTabs/\{\"url\":\"# ClosedTabs:\"attributes/g" заменит строку _closedTabs с "url":"# ClosedTabs:"attributes во всем "файле" (опция g);
  • sed "s/\\lastSessionState/\{\"url\":\"# LastSession:\"attributes/" заменит lastSessionState с "url":"# LastSession:"attributes;
  • sed "s/#/\n#/" поставит новую строку перед каждым #,
  • ; echo добавит пустую строку внизу.

В моем случае вывод команды:

# CurrentSession:
https://Ask-ubuntu.ru/
https://www.mozilla.org/en-US/

# ClosedTabs:
https://www.yahoo.com/

# LastSession:
https://Ask-ubuntu.ru/
https://www.abv.bg/

# ClosedTabs:
https://www.google.com/gmail/about/
https://www.yahoo.com/

2.A. Если вы хотите получить и историю, вы можете использовать:

cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | sed "s/\\_closedTabs.*//" | sed "s/{/\n{/g" | egrep 'url":"http*' | cut -d\" -f4

В моем случае вывод команды:

https://Ask-ubuntu.ru/
https://www.google.bg/search?client=ubuntu&channel=fs&q=firefox&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=pTKyWIitGqTs8wewj4KgDQ
https://www.mozilla.org/bg/firefox/new/
https://www.mozilla.org/en-US/

2.б. Вы можете поместить разделитель между данными для каждой вкладки:

cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs.*//" | \
sed "s/{/\n{/g" | \
sed "s/entries/url\":\"# TAB:/g" | \
egrep 'url":"*' | \
cut -d\" -f4 | \
sed "s/#/\n#/"

В моем случае вывод команды:

# TAB:
about:startpage
https://Ask-ubuntu.ru/

# TAB:
https://www.google.bg/search?client=ubuntu&channel=fs&q=firefox&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=pTKyWIitGqTs8wewj4KgDQ
https://www.mozilla.org/bg/firefox/new/
https://www.mozilla.org/en-US/

3. 1.Б. и 2.Б. все вместе:

printf "\n# CurrentSession:\n"; \
cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs/\{\"url\":\"# ClosedTabs:/g" | \
sed "s/\\lastSessionState/\{\"url\":\"# LastSession:/" | \
sed "s/entries/url\":\"# TAB:/g" | \
sed "s/{/\n{/g" | \
egrep 'url":"*' | \
cut -d\" -f4 | \
sed "s/#/\n#/" \
; echo

В моем случае вывод команды:

# CurrentSession:

# TAB:
https://host.bg/
https://admin.host.bg/

# TAB:
https://www.mediawiki.org/wiki/MediaWiki

# TAB:
https://en.wikipedia.org/wiki/Main_Page

# ClosedTabs:

# TAB:
about:startpage
https://www.yahoo.com/

# LastSession:

# TAB:
about:startpage
https://Ask-ubuntu.ru/

# ClosedTabs:

# TAB:
https://www.mozilla.org/en-US/
https://www.google.com/gmail/about/

II. Когда Firefox закрыт:

Когда Firefox закрыт, вы можете получить данные за последний сеанс. Подход такой же, как описано выше, но вместо recovery.js ты должен использовать sessionstore.js (или же previous.js):

cat $HOME/.mozilla/firefox/*.default/sessionstore.js \
...

Рекомендации:

2022 Ответ

Как упоминает Бао, ответ, получивший наибольшее количество голосов, больше не работает в современном Firefox, потому что файл, от которого он зависит, имеет два изменения формата:

  1. Теперь это сжатый файл, поэтому мы используем lz4jsoncatпрочитать это.
  2. Метод определения текущей вкладки и элемента истории в этом файле отличается. Теперь мы должны отсортировать вкладки на lastAccessed, а затем найдите правильный элемент истории из indexполе. я предпочитаю jqдля этого.

Этот однострочник должен сделать это:

      lz4jsoncat ~/.mozilla/firefox/*.default-release/sessionstore-backups/recovery.jsonlz4 | jq -r ".windows[0].tabs | sort_by(.lastAccessed)[-1] | .entries[.index-1] | .url"

Чтобы установить необходимые инструменты в Ubuntu, запустите это:

      $ sudo aptitude install jq lz4json

Принятый ответ не работает, Firefox удалил этот файл.

Итак, вот мое решение (я) этого:

Метод 1: используйте инструменты автоматизации клавиатуры, такие как xdotool, для публикации ключей для копирования URL-адреса в буфер обмена.

У этого метода есть некоторые недостатки, то есть он изменит текущий фокус курсора (сначала нужно перейти в адресную строку, используя Ctrl-L)

Способ 2: использовать Grease Monkey, привязать клавишу F12 к GM_setClipboard(document.location); используйте инструменты автоматизации клавиатуры, отправьте клавишу F12 в firefox; смотреть буфер обмена, сохранить его (возможно, даже сделать резервную копию и восстановить буфер обмена).

Перетаскивания

Перетащите его и бросьте. Перетащите его от значка слева от поля адреса. В большинстве браузеров вы можете увидеть значок i.

Копировать вставить

Вы также можете использовать копирование и вставку. Скопируйте текст из поля адреса. Вставьте его в терминал.

Другие вопросы по тегам