Skip to main content

Raymii.org Raymii.org Logo

Quis custodiet ipsos custodes?
Home | About | All pages | Cluster Status | RSS Feed | Gopher

Get the current or all Firefox tab urls in Bash

Published: 01-09-2014 | Author: Remy van Elst | Text only version of this article


❗ This post is over seven years old. It may no longer be up to date. Opinions may have changed.

This snippets gets the current firefox tab url or all the firefox tab url's. It uses the sessionstore.js file in your profile folder. That file is updated almost instantly, however it will not always be the correct url.

I use this to track my time on different websites over the day together with some other shell scripts.

Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.

You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $100 credit for 60 days.

Get all the open tabs:

python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/RANDOM.profile/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")'

Example output:

http://wiki.bash-hackers.org/commands/classictest http://monitoring.raymii.nl/nagios/ http://www.brendangregg.com/blog/2014-07-16 /iosnoop-for-linux.html http://duplicity.nongnu.org/duplicity.1.html http://www.routeralley.com/guides.html http://www.hactrn.net/sra/vaxen.html http://duplicity.nongnu.org/duplicity.1.html http://tweakers.net/nieuws/list/20140902

Get the current active/open tab number:

python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/RANDOM.profile/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nprint str(jdata["windows"][0]["selected"])'

Example output:

11

Printing that line number from all open tab url's gives you the current open tab. sed -n "3p" file prints line 3 from file. Combining the commands with bash expansion results in the following:

sed -n "$(python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/RANDOM.profile/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nprint str(jdata["windows"][0]["selected"])')p" <(python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/RANDOM.profile/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")')

Output:

http://tweakers.net/nieuws/list/20140902

This can also be in your .bashrc file:

current_firefox_tab_number() {
    python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/RANDOM.profile/sessionstore.js", "r")\njdata = json.loads(f.read())\nf.close()\nprint str(jdata["windows"][0]["selected"])'
}

current_firefox_url() {
    sed -n "$(current_firefox_tab_number)p" <(python2 <<< $'import json\nf = open("/home/username/.mozilla/firefox/RANDOM.profile/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")')
}

Example:

$ current_firefox_tab_number 
11

$ current_firefox_url 
http://tweakers.net/nieuws/list/20140902
Tags: bash , firefox , python , sessionstore , snippets