Python webbrowser调用open/open_new()仅开标签页,无法打开新窗口求助
Python Webbrowser 打开新窗口而非标签页失效问题
根据Python官方的webbrowser模块文档,使用带new=1参数的webbrowser.open()函数或者webbrowser.open_new()函数,理应打开新的浏览器窗口而非新标签页。
我在大型项目里需要这个功能,一开始以为是项目其他代码影响,于是简化测试代码为:
import webbrowser webbrowser.open("https://stackoverflow.com", new=1, autoraise=True) webbrowser.open_new("https://stackoverflow.com")
但即使是这几行代码,两个函数都没能打开新窗口,只会打开新标签页。请问这是什么原因?
问题原因及解决办法
- 核心原因是webbrowser模块的行为最终受系统默认浏览器的配置控制。现在主流浏览器(Chrome、Edge、Firefox等)默认会把“新窗口”请求转化为新标签页,除非你在浏览器的设置里手动修改了相关选项(比如Chrome可以在设置里调整“打开链接的方式”为新窗口)。
- webbrowser模块只是封装了系统浏览器的调用逻辑,有些浏览器的可执行文件本身就优先使用标签页。比如Chrome默认用现有窗口开新标签,必须传入
--new-window参数才会强制开新窗口。 - 如果必须确保打开新窗口,可以绕过webbrowser模块,直接调用浏览器的可执行文件并传入对应命令行参数。举个Chrome的例子:
import subprocess # Windows 路径示例 subprocess.run(["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", "--new-window", "https://stackoverflow.com"]) # Linux 示例 # subprocess.run(["google-chrome", "--new-window", "https://stackoverflow.com"]) # macOS 示例 # subprocess.run(["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "--new-window", "https://stackoverflow.com"])
- 另外可以检查webbrowser模块是否调用了正确的浏览器,用
webbrowser.get()指定具体浏览器类型,但这依然受浏览器自身配置限制:
browser = webbrowser.get('chrome') browser.open_new("https://stackoverflow.com")
内容的提问来源于stack exchange,提问作者MrPrecise
相关产品推荐
相关产品推荐

