4

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?

Vankog
  • 557
  • 1
  • 9
  • 16

6 Answers6

10

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.

dano
  • 91,354
  • 19
  • 222
  • 219
  • Sounds like something that needs reporting to the [Python bug tracker](http://bugs.python.org/); I cannot find any pre-existing issues. – Martijn Pieters Jul 21 '14 at 20:06
  • @MartijnPieters I was in the process of filing one :) – dano Jul 21 '14 at 20:06
  • Thanks, @dano: [Issue22025 - webbrowser.get(command_line) does not support Windows-style path separators](http://bugs.python.org/issue22025) – Vankog Jul 21 '14 at 20:19
  • python 3.6 windows7: did not work for me (URL is open in default browser) – JinSnow Jan 18 '17 at 09:20
4

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')
P-Gn
  • 23,115
  • 9
  • 87
  • 104
2

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

0

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')
Jack G
  • 96
  • 9
Dinesh
  • 21
  • 8
0

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)
howdoicode
  • 779
  • 8
  • 16
-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')
funie200
  • 3,688
  • 5
  • 21
  • 34
  • 1
    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. – Brenton Fletcher Nov 13 '20 at 06:38