Python: generic webbrowser.get().open() 对 chrome.exe 不起作用

4 投票
6 回答
19688 浏览
提问于 2025-04-18 14:09

我在用Python 2.7(Windows 8.1 64位),想要在Chrome浏览器中打开一个网址。因为Chrome只在3.3及以上版本中原生支持,所以我尝试了一种通用的方法:

import webbrowser
webbrowser.get("C:\Program Files (x86)\Google\Chrome\Application\chrome.exe %s").open("http://google.com")

路径是正确的,打印出来也给了我一个处理器:

"<webbrowser.GenericBrowser object at 0x0000000002D26518\>"

但是,open() - 更希望使用open_new_tab() - 这个功能却不管用,返回的是False。

如果我在Windows的运行对话框中执行

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://google.com"

这个命令,它是可以工作的。


如果我把Chrome设置为默认浏览器,然后运行

webbrowser.get().open("http://google.com")

这个命令,它也能正常工作,但这不是我想要的结果。

有没有人知道哪里出了问题?

6 个回答

0

在Windows系统上,你不需要使用类似UNIX那样的路径格式。只要把指向google.exe的原始字符串路径用转义引号包起来,然后在后面加上%s这个标记,放在一个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)
0

对我有效

代码片段:

import webbrowser

chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
webbrowser.get(chrome_path).open('http://google.com')
2

根据上面的建议,在Windows系统上,为了让Firefox浏览器能够使用,我在配置文件中修改并取消了注释以下这一行(注意最后的%s):

c.NotebookApp.browser = 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe %s'

这样做对我有效。谢谢!

4

你不需要切换到Unix风格的路径,只需要把可执行文件用引号括起来就行。

import webbrowser
webbrowser.get('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" %s').open('http://google.com')
10

在使用 webbrowser.get 这个函数时,你需要用 Unix 风格的路径:

webbrowser.get("C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s").open("http://google.com")

这是因为 webbrowser 在内部会对路径进行 shlex.split 操作,而这个操作会把 Windows 风格的路径分隔符给删掉:

>>> 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 加上 posix=False 这个参数,它会处理得很好,但 webbrowser 不会提供这个参数,即使是在 Windows 系统上。这可以说是 webbrowser 的一个 bug。

撰写回答