web-dev-qa-db-fra.com

Obtenir l'URL de l'onglet actif en cours de Firefox via la ligne de commande

J'utilise Mozilla Firefox 54.0 et j'ai un petit problème simple.

Étant donné une session de Firefox déjà ouverte et plusieurs onglets ouverts, puis-je extraire l'onglet actuellement actif (l'onglet que je regarde) via la ligne de commande?

Je n'ai rien trouvé dans un liste d'arguments en ligne de commande ou sur le page de développement de Mozilla .

Ma question diffère de cette question , car cela ne fonctionne pas comme prévu pour moi et je ne veux pas tous les onglets; Je veux un onglet spécifique, l'onglet que je regarde.

Est-ce que quelqu'un a une idée?

Existe-t-il un moyen de s’interfacer avec une instance en cours d’exécution de Firefox?

Merci d'avoir lu

Edit: La solution:

importer json

f = open ('~/.mozilla/firefox/RANDOM.default/sessionstore-backups/recovery.js')

jdata = json.loads (f.read ())

f.close ()

CurrentTab = jdata.get("windows")[0].get("tabs")[jdata["windows"][0]["sel‌​ected"]-1].get("entr‌​ies")[HistLen-1].get‌​("url")

tandis que

HistLen = len(jdata.get("windows")[0].get("tabs")[jdata["windows"][0][‌​"selected"]-1].get("‌​entries"))

La HistLen était nécessaire car sinon, j'avais toujours une page plus ancienne que j'avais précédemment ouverte dans cet onglet.

Merci d'avoir lu

4
oldmansaur

Une solution a été fournie ici qui est une combinaison de sed et python2. Voici une version un peu plus claire de celle-ci:

sed -n "$(
python2 <<< $'import json
f = open("/home/username/.mozilla/firefox/RANDOM.default/sessionstore-backups/recovery.js", "r")
jdata = json.loads(f.read())
f.close()
print str(jdata["windows"][0]["selected"])')p" <(python2 <<< $'import json
f = open("/home/username/.mozilla/firefox/RANDOM.default/sessionstore-backups/recovery.js", "r")
jdata = json.loads(f.read())
f.close()
for win in jdata.get("windows"):
 for tab in win.get("tabs"):
  i = tab.get("index") - 1
  print tab.get("entries")[i].get("url")'
)

Le fichier qu'il utilise est:

/home/username/.mozilla/firefox/RANDOM.profile/sessionstore.js

dans les versions plus récentes, vous devriez le changer avec:

/home/username/.mozilla/firefox/RANDOM.default/sessionstore-backups/recovery.js

Notez que ce fichier est régénéré toutes les 15 secondes. Après le changement immédiat de la fenêtre, il ne vous donne pas l'URL correcte, vous devez donc attendre une seconde.


Comment cela marche-t-il?

Dans la première partie, il recherche l’id de l’onglet actif, c’est quelque chose entre 1 et le nombre d’onglets ouverts. Disons que c'est "3", le code correspondant à cette fin est:

str(jdata["windows"][0]["selected"])

Ensuite, il retourne une liste d'URL (Tous les onglets ouverts) et la transmet au stdin de sed:

for win in jdata.get("windows"):
 for tab in win.get("tabs"):
  i = tab.get("index") - 1
  print tab.get("entries")[i].get("url")

Nous faisons donc quelque chose comme:

sed -n 3p <<< "URL1
URL2
URL3"

ce qui nous amène à "URL3".

2
Ravexina