
Раньше я делал это в Firefox с помощью команды Python, но недавно что-то изменилось, и я больше не могу получить URL!
Что раньше работало с Firefox:
#!/bin/bash current_tab_num () { python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/xxxxx.default/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nprint str(jdata["windows"][0]["selected"])' } current_tab_url () { sed -n "$(current_tab_num)p" <(python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/xxxxx.default/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nfor win in jdata.get("windows"):\n\tfor tab in win.get("tabs"):\n\t\ti = tab.get("index") - 1\n\t\tprint tab.get("entries")[i].get("url")') } current_tab_url
Может ли кто-нибудь сказать мне, как это сделать в Firefox и/или Chrome?
ПРИМЕЧАНИЕ: Я не понимаю Python, я просто где-то нашел эти команды и использовал их в Bash!
решение1
У меня была та же проблема, и я дошел до этого, пытаясь ее решить, поэтому я опубликую свое решение (которое довольно плохое) здесь.
Для этого я использую wmctrl (вместо этого можно использовать xprop) и xdotool. Раньше я использовал расширение, чтобы сделать URL видимым в строке заголовка (затем можно получить доступ к URL через xprop или wmctrl). Оба метода работают довольно хорошо, хотя они не совсем «чистые».
id=$(wmctrl -l | grep -oP "(?<=)(0x\w+)(?=.*Chromium)") //Put here the regex for the browser you use
xdotool key --window $id "ctrl+l"
xdotool key --window $id "ctrl+c"
Теперь у вас есть URL в буфере обмена. Затем я использую xclip для работы с URL.
Мне бы очень хотелось увидеть реальное решение этой проблемы, если кто-нибудь его найдет.
решение2
Не могли бы вы сказать ошибку, которую вы получаете после выполнения, потому что скрипт у меня работает. Здесь есть тот же вопрос, на который ответили с помощью php
и perl
:
Вывод URL открытых вкладок Firefox в терминале
Поскольку основная часть написана на Python, вот чисто Python-скрипт, который делает то же самое, попробуйте и его:
#!/usr/bin/python
import json
f = open("recovery.js","r")
jdata = json.loads(f.read())
f.close()
number_of_selected_tab = jdata["windows"][0]["selected"]
tab_number = 1
for win in jdata.get("windows"):
for tab in win.get("tabs"):
if number_of_selected_tab == tab_number :
tab_index = tab.get("index") - 1
print tab.get("entries")[tab_index].get("url")
tab_number = tab_number + 1
Я заменил /home/username/.mozilla/firefox/xxxxx.default/sessionstore.js
файл на recovery.js
. В моем случае (Mozilla Firefox 44.0, openSUSE 13.1) файл — ~/.mozilla/firefox/*.default/sessionstore-backups/recovery.js
. И последнее, но не менее важное: скрипт не работает, если у вас Firefox
запущено два экземпляра.