List of open browser tabs programmatically
Question:
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.otherstufff.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.
Answers:
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.
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.
You can get the title of all open windows using the PyGetWindow library.
This won’t give you a list of tabs open in your browser, but it should give you the title of the current active tab in your browser.
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.otherstufff.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.
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.
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.
You can get the title of all open windows using the PyGetWindow library.
This won’t give you a list of tabs open in your browser, but it should give you the title of the current active tab in your browser.