簡體   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