Python: generic webbrowser.get().open() 对 chrome.exe 不起作用
我在用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 个回答
在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)
对我有效
代码片段:
import webbrowser
chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
webbrowser.get(chrome_path).open('http://google.com')
根据上面的建议,在Windows系统上,为了让Firefox浏览器能够使用,我在配置文件中修改并取消了注释以下这一行(注意最后的%s):
c.NotebookApp.browser = 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe %s'
这样做对我有效。谢谢!
你不需要切换到Unix风格的路径,只需要把可执行文件用引号括起来就行。
import webbrowser
webbrowser.get('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" %s').open('http://google.com')
在使用 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。