I would like to be able to perform the following actions from outside the browser, for example from a script

‘’’ Obtain a list of all tabs, and which URL is open Obtain a list of all firefox windows and which tab is in each and in what order Obtain a list of firefox running instances Actions on tabs Close a tab Open a new tab and enter URL move a tab in a window’s tab order move a tab to another window mute/unmute a tab make a tab hidden or unhide pin/unpin a tab select/unselect a tab discard a tab reload a tab copy tab body or a specific xpath run a javascript cmdlet, (bookmarklet ? ) Run a function of a script in somethingmonkey bookmarks list all bookmarks folder and bookmarks move a bookmark to another folder delete a bookmark create a bookmark get/change position of a firefox window close a window/ open a new window list installed addons turn an addon on or off ‘’’

I would love to be able to write script, from outside firefox, and do these actions

I have found about the remote debugger, but I can’t figure out if it’s only for debugging firefox on android via adb ? Or can I use that directly from a script ?

https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/index.html#connecting-over-the-network

https://wiki.mozilla.org/Firefox_OS/Remote_Control

https://wiki.mozilla.org/Firefox/CommandLineOptions

devtools.debugger.remote-enabled -start-debugger-server ?

Is any of this possible ?

thanks !

  • lemmyreader@lemmy.ml
    link
    fedilink
    English
    arrow-up
    13
    arrow-down
    1
    ·
    7 months ago

    Your question reminded me of TabFS https://omar.website/tabfs

    Examples of stuff you can do!

    • List the titles of all the tabs you have open
    • Cull tabs like any other files
    • Close all Stack Overflow tabs
    • Save text of all tabs to a file
    • Evaluate JavaScript on a page / watch expressions: demo
    • Get images / scripts / other resource files from page
    • Retrieve what’s playing on YouTube Music: youtube-music-tabfs
    • Reload an extension when you edit its source code
    • TODO: Live edit a running Web page
    • TODO: Import data (JSON? XLS? JS?)
    • sugar_in_your_tea@sh.itjust.works
      link
      fedilink
      arrow-up
      3
      ·
      7 months ago

      Wow, I never knew I needed this. :)

      There’s a bunch of stuff I have wanted to do, but it’s been too annoying:

      • copy URLs from a list of tabs - e.g. to send to a friend/coworker
      • close tabs with a common theme - Github, Confluence, Jira, etc
      • search across open tabs

      I’m going to play with this today.

  • boredsquirrel@slrpnk.net
    link
    fedilink
    arrow-up
    10
    ·
    7 months ago

    Can you please make those into a list?

    Yes that is likely possible. Firefox uses SQL databases, json files, and more complex stuff to store all its data.

    Reading data is possible but complex. Opening windows is done via CLI interface. Moving the windows is part of your compositor and not Firefox, like KWin on KDE.

    • Deebster@lemmy.ml
      link
      fedilink
      arrow-up
      5
      ·
      edit-2
      7 months ago

      It’s

      • Obtain a list of all tabs, and which URL is open
      • Obtain a list of all firefox windows and which tab is in each and in what order
      • Obtain a list of firefox running instances
      • Actions on tabs
      • Close a tab
      • Open a new tab and enter URL
      • move a tab in a window’s tab order
      • move a tab to another window
      • mute/unmute a tab
      • make a tab hidden or unhide
      • pin/unpin a tab
      • select/unselect a tab
      • discard a tab
      • reload a tab
      • copy tab body or a specific xpath
      • run a javascript cmdlet, (bookmarklet ? )
      • Run a function of a script in somethingmonkey
      • bookmarks
      • list all bookmarks folder and bookmarks
      • move a bookmark to another folder
      • delete a bookmark
      • create a bookmark
      • get/change position of a firefox window
      • close a window/open a new window
      • list installed addons
      • turn an addon on or off
    • interdimensionalmeme@lemmy.mlOP
      link
      fedilink
      arrow-up
      2
      ·
      7 months ago

      Oops it looked fine when I posted. And I won’t be back at my computer for quite a while.

      It is a series of basic browser function. Mostly list tabs, read tab url, move tab, close tab.

      • CosmicTurtle0@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        3
        ·
        7 months ago

        It might help to know what exactly you’re trying to do. Are you trying to automate something? Buy stonks? Download porn? Click ads?

        There might be better solutions than automating a browser.

        • interdimensionalmeme@lemmy.mlOP
          link
          fedilink
          arrow-up
          1
          arrow-down
          1
          ·
          7 months ago

          Control basic browser fonction from console and scripts.

          Example, move all tab where url contains testpattern1 to new window. Imagine a sinple example like that for all the listed functions.

      • Deebster@lemmy.ml
        link
        fedilink
        arrow-up
        2
        ·
        7 months ago

        It only looked ok in the textarea you wrote it in, but the format was wrong.

        You have a few options:

        * lists
        * with a * or -
        
        • lists
        • with a * or -

        Blank
        
        Lines
        
        For paragraphs
        

        Blank

        Lines

        For paragraphs


        Double spaces  
        At end of lines  
        If you don't want paragraphs
        

        Double spaces
        At end of lines
        If you don’t want paragraphs


        It looked like you were trying to use code formatting which is three backticks, but you used single quotes. This is a backtick: `

        Then
        It'll  keep   exactly what you write
        l1I|
        
        • interdimensionalmeme@lemmy.mlOP
          link
          fedilink
          arrow-up
          2
          ·
          7 months ago

          Thanks that is a great lead ! So webdriver is a common interface of browser remote control.

          Firefox has geckodriver which is a bridge from webdriver protocol to “marionette” which is firefox’ internal remote control protocol.

          Apparently, marionette is an open TCP port where you send a command and it replies in json.

          I could make a batch script that uses netcat to send my commands ! I just need to figure put how to open that port and what the commands are.

          • ahal
            link
            fedilink
            arrow-up
            2
            ·
            edit-2
            7 months ago

            Yes, IIRC there’s a pref or env that needs to be set too… I want to say MOZ_ENABLE_MARIONETTE, but it’s been awhile.

          • ReversalHatchery@beehaw.org
            link
            fedilink
            English
            arrow-up
            1
            ·
            7 months ago

            I just need to figure put how to open that port

            I’m not sure what you mean by this, but you should not need to open any ports here, especially to the internet.
            Even more, if you can find a setting for it, make firefox listen only on localhost, and not on your network interfaces, because this can quickly become a security nightmare.

  • Max-P@lemmy.max-p.me
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    7 months ago

    I think it would be much cleaner to make an addon that does this within the browser and exposes the functionality as a web API (or failing that, connects to a relay server locally). Then you can just use curl to send it commands.

    You can look at how KDE Connect / Plasma Browser Integration does it, it does very similar things to integrate with Plasma like go to a tab via KRunner.

      • ReversalHatchery@beehaw.org
        link
        fedilink
        English
        arrow-up
        1
        ·
        7 months ago

        They can’t open a port, but they can connect to webservers (and similar things) on localhost.

        There’s also “native messaging”, this might be a better choice if you go the addon route.

    • interdimensionalmeme@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      ·
      7 months ago

      Also I specifically want that from the console. The console is the universal tgat doesn’t require using some particulat language, or even programming at all