繁体   English   中英

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

[英]webbrowser.open() breaks the link (python 3.7)

当我跑步

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

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

我正在使用:

  • Linux Manjaro
  • pyenv安装了Python 3.7.0( env PYTHON_CONFIGURE_OPTS="--enable-shared --enable-optimizations" pyenv install 3.7.0
  • Opera是我的默认浏览器
  • webbrowser.get()返回<webbrowser.Opera object at 0x7f546c22ea90>
  • 我的操作系统环境转储

编辑此问题已在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中,它将使用其CLI命令直接打开Opera浏览器:

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

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

要解决此问题,您可以使用register()和3.7中引入的新的preferred参数 ,强制通过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参数配合正常。 对Python进行了更改以反映这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM