Python:chrome.exe 的通用 webbrowser.get().open() 不起作用
Posted
技术标签:
【中文标题】Python:chrome.exe 的通用 webbrowser.get().open() 不起作用【英文标题】:Python: generic webbrowser.get().open() for chrome.exe does not work 【发布时间】:2014-09-12 10:37:28 【问题描述】:我使用的是 Python 2.7 (Win 8.1 x64),我想在 Chrome 中打开一个 URL。 由于 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。
如果我运行命令
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" "https://google.com"
在 Windows 运行对话框中,它确实可以工作。
如果我将 Chrome 设置为标准浏览器并运行
webbrowser.get().open("http://google.com")
它确实有效,但这不是我想要的。
有人知道出了什么问题吗?
【问题讨论】:
当你import subprocess; subprocess.Popen([r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', 'https://google.com']).wait()
时会发生什么?
@MartijnPieters:这确实有效。 :-)
是的,dano 解释了哪里出了问题;我没有意识到 shlex
在 Windows 上会做错事。
【参考方案1】:
您必须在 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
中的一个错误。
【讨论】:
听起来像是需要向Python bug tracker报告的事情;我找不到任何预先存在的问题。 @MartijnPieters 我正在申请一个:) 谢谢,@dano:Issue22025 - webbrowser.get(command_line) does not support Windows-style path separators python 3.6 windows7:对我不起作用(URL 在默认浏览器中打开)【参考方案2】:按照上面的建议并在 Windows 上工作,为了启用 Firefox,我在配置文件中更改(并取消注释)以下行(注意末尾的 %s):
c.NotebookApp.browser = 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe %s'
这对我有用。 谢谢
【讨论】:
你的意思是什么配置文件?【参考方案3】:您无需切换到 Unix 风格的路径——只需引用可执行文件即可。
import webbrowser
webbrowser.get('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" %s').open('http://google.com')
【讨论】:
【参考方案4】:为我工作
代码sn-p:
import webbrowser
chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
webbrowser.get(chrome_path).open('http://google.com')
【讨论】:
【参考方案5】:在 Windows 上,您不需要使用 UNIX 样式的路径。只需将google.exe
的原始字符串路径用转义引号括起来,然后在f-string 中附加%s
标记:
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)
【讨论】:
【参考方案6】:你可以试试这个:
import webbrowser
chrome_path = "path_where_chrome_is_located"
webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(chrome_path))
webbrowser.get('chrome').open('url')
【讨论】:
感谢您的回答,但在当前状态下,它的格式不是很好。此外,查看问题和接受的答案,提问者遇到的实际问题是 chrome 路径本身,您的答案目前没有解决。以上是关于Python:chrome.exe 的通用 webbrowser.get().open() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章