Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

List of open browser tabs programmatically

Is there a way to programmatically obtain a list of open tabs in a browser by index?

For example, suppose Google Chrome is open with two tabs.
In the program, a line something like:

tabs_list = list_tabs(hwnd)

...where hwnd is the handle to the window for the overall Chrome instance and tabs_list is a dictionary something like:

[
0 : 'http://stackoverflow.com/',
1 : 'http://www.coolstuffff.com/'
]

(...or maybe by title of the window instead of url)

If so, then bringing focus to one of them can be possible from the Python script with keyboard commands, control- (CTRL-) like control-1 or control-2.


An edit added later to try to help clarify: Picture a local wxPython app, where you already know how to activate a given instance of Chrome on that same box from within your wxPython app running locally, and that browser instance has multiple tabs open, and now you want to insure that a certain tab has focus, to be able to interact with that web page that is being displayed (maybe using CTRL-A CTRL-C for example to harvest its content). This question is not about issuing keyboard commands, that is already known, the question is how to obtain a list of open tabs, if possible, thanks.

like image 666
gseattle Avatar asked Sep 24 '11 08:09

gseattle


People also ask

How can I get a list of all open tabs?

To access it, click on the dropdown arrow next to the minimize tab button. It will open up a scrollable dropdown with all tabs open in Chrome. Save this answer.

How do you know the number of browser tabs that are open currently?

To find the number of tabs that are open, you could do something like: chrome. tabs. query({windowType:'normal'}, function(tabs) { console.

Can you check how many tabs are open in Chrome?

A: As mentioned above, both Chrome and Edge have a "Task Manager" function that essentially prepares a navigable list of all your open tabs for you in a separate browser tab. In Chrome, this can be accessed by clicking on the three dots stacked vertically in the upper right corner, which opens the main command menu.


2 Answers

While not sure of your target OS, you can do this on Mac OS X:

>>> from appscript import *
>>> map(lambda x: x.title(), app('Google Chrome').windows[0].tabs())
[u'Stack Overflow', u'Google']

On Windows, you will want to look into OLE Automation with Python.

like image 195
Art Taylor Avatar answered Sep 28 '22 07:09

Art Taylor


Its not possible. First you haven't noted what app you develop but if you use python for a website backend - then its just a server-side language and does not know what a "browser" is - the server outputs to the browser and thats all. And I don't believe it's possible with client-side language like javascript as this seem to be a serious security and privacy issue if it was possible.

Edit: If you are developing a Chrome plugin lets say it might be a whole different story - but then it goes towards the Chrome API and your tagging is wrong, as "python" itself can not do that.

like image 29
ddinchev Avatar answered Sep 28 '22 06:09

ddinchev