Python: generic webbrowser.get().open() for chrome.exe does not work
Solution 1
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
.
Solution 2
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')
Solution 3
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
Vankog
Updated on June 04, 2022Comments
-
Vankog about 2 years
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?
-
Martijn Pieters almost 10 yearsSounds like something that needs reporting to the Python bug tracker; I cannot find any pre-existing issues.
-
dano almost 10 years@MartijnPieters I was in the process of filing one :)
-
Vankog almost 10 years
-
JinSnow over 7 yearspython 3.6 windows7: did not work for me (URL is open in default browser)
-
Vankog almost 7 yearsWhat config file do you mean?
-
tripleblep over 3 yearsThank you for your answer, however in it's current state it's not formatted very well. Also, looking at the question and the accepted answer, the actual problem the asker was having was with the chrome path itself, which your answer doesn't currently address.