Reputation: 707
I am on Python 2.7 (Win 8.1 x64) and I want to open a URL in Chrome. As Chrome is only natively supported in 3.3+, I was trying a generic call:
import webbrowser
webbrowser.get("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe %s").open("http://google.com")
The path is correct and print does give me a Handler:
"<webbrowser.GenericBrowser object at 0x0000000002D26518\>"
However, the open() - preferably open_new_tab()) - function does not work. It returns False.
If I run the command
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://google.com"
in windows run dialog, it does do work, though.
If I set Chrome as standard browser and run
webbrowser.get().open("http://google.com")
it does work, but it's not what I want.
Has anyone an idea what's going wrong?
Upvotes: 4
Views: 20297
Reputation: 1
You can try this:
import webbrowser
chrome_path = "path_where_chrome_is_located"
webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chrome_path))
webbrowser.get('chrome').open('url')
Upvotes: -1
Reputation: 993
On Windows, you don't need to use UNIX-style path. Just wrap the raw string path to google.exe
in escaped quotes, and append %s
token after it, within an f-string:
import webbrowser
url = "https://docs.python.org/3/library/webbrowser.html"
chrome = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
webbrowser.get(f"\"{chrome}\" %s").open_new_tab(url)
Upvotes: 0
Reputation: 21
Worked for me
code snippet:
import webbrowser
chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
webbrowser.get(chrome_path).open('http://google.com')
Upvotes: 0
Reputation: 24661
You don't need to switch to Unix-style paths -- simply quote the executable.
import webbrowser
webbrowser.get('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" %s').open('http://google.com')
Upvotes: 4
Reputation: 21
Following the suggestions above and working on Windows, to enable Firefox I have changed (and un-commented) the following line in the config file (note the %s at the end):
c.NotebookApp.browser = 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe %s'
This worked for me. Thanks
Upvotes: 2
Reputation: 94961
You have to use unix-style paths in the webbrowser.get
call:
webbrowser.get("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s").open("http://google.com")
This is because webbrowser
internally does a shlex.split
on the path, which will just erase Windows-style path separators:
>>> cmd = "C:\\Users\\oreild1\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe %s"
>>> shlex.split(cmd)
['C:Usersoreild1AppDataLocalGoogleChromeApplicationchrome.exe', '%s']
>>> cmd = "C:/Users/dan/AppData/Local/Google/Chrome/Application/chrome.exe %
s"
>>> shlex.split(cmd)
['C:/Users/dan/AppData/Local/Google/Chrome/Application/chrome.exe', '%s']
shlex
will actually do the right thing here if given the posix=False
keyword argument, but webbrowser
won't supply that, even on Windows. This is arguably a bug in webbrowser
.
Upvotes: 10