Skip to main content
 首页 » 编程设计

python之webbrowser.open() 断开链接(python 3.7)

2024年08月15日51rubylouvre

当我运行时

import webbrowser 
webbrowser.open('https://google.com') 

在 Python 3.7 中,它会在我的默认浏览器中打开损坏的 url:http://openurl%28https//google.com,new-window) .当我在 3.6 中运行相同的代码时,它可以正常工作。是 Python 3.7 中的错误还是我配置错误?

我正在使用:

  • Linux Manjaro
  • Python 3.7.0 安装了 pyenv ( env PYTHON_CONFIGURE_OPTS="--enable-shared --enable-optimizations" pyenv install 3.7.0 )
  • Opera 是我的默认浏览器
  • webbrowser.get()返回 <webbrowser.Opera object at 0x7f546c22ea90>
  • 我的os.environ dump

请您参考如下方法:

编辑:This issue固定在 Python 端。在 Python 的下一个次要版本之后,您不需要考虑这个问题。不过,以下答案仍然是有用的分析。


在 Python3.6 中,webbrowser.get()会给你类似的东西:

<webbrowser.BackgroundBrowser object at 0x7f1e5373a048>

但是在Python3.7中:

<webbrowser.Opera object at 0x7f546c22ea90> .

这意味着在 Python3.6 中它将尝试使用 XDG 标准打开 URL:

xdg-open https://google.com

而在 Python3.7 中它将直接使用 its CLI command 打开 Opera 浏览器:

opera -remote "openURL(https://google.com,new-window)"

虽然我不确定此更改是否有意为之,但这两种方式都应该是正确的。问题是,Opera 的命令行选项已损坏。这不是 Python 的错,而是 Opera 的错误。 (尝试使用上面的命令打开,您将看到相同的 http://openurl%28https//google.com,new-window)。)

解决方法是,您可以使用 register() with the new preferred argument introduced in 3.7 通过 XDG 标准强制打开 URL。 .

import webbrowser 
webbrowser.register("xdg-open", None, webbrowser.BackgroundBrowser("xdg-open"), preferred=True) 
print(webbrowser.get())  # Now you will see <webbrowser.BackgroundBrowser object at 0x7f1e5373a048> 
webbrowser.open('https://google.com') 

希望对你有帮助!

编辑: 看起来 Opera 的错误是因为他们在将引擎更改为 Chromium 后没有更新文档。 Opera 可以很好地处理 Chrom 的 CLI 参数。我 issued a change to Python反射(reflect)这一点。