Python: generic webbrowser.get().open() for chrome.exe does not work

15,979

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

Share:
15,979
Vankog
Author by

Vankog

Updated on June 04, 2022

Comments

  • Vankog
    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
    Martijn Pieters almost 10 years
    Sounds like something that needs reporting to the Python bug tracker; I cannot find any pre-existing issues.
  • dano
    dano almost 10 years
    @MartijnPieters I was in the process of filing one :)
  • Vankog
    Vankog almost 10 years
  • JinSnow
    JinSnow over 7 years
    python 3.6 windows7: did not work for me (URL is open in default browser)
  • Vankog
    Vankog almost 7 years
    What config file do you mean?
  • tripleblep
    tripleblep over 3 years
    Thank 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.