Vankog
Vankog

Reputation: 707

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

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

Answers (6)

Anime Guy
Anime Guy

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

howdoicode
howdoicode

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

Dinesh
Dinesh

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

P-Gn
P-Gn

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

user8604704
user8604704

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

dano
dano

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

Related Questions