39

デフォルトのブラウザーで Python からローカルの html ファイルを起動しようとしています (現在、.html ファイルをダブルクリックすると、Chrome が起動し、デフォルトは Google Chrome になります)。

Python の を使用するwebbrowser.open()と、代わりに IE が起動し、アドレス バーが空白になります。

Python 2.7.1 (r271:86832, Nov 27 2010, 17:19:03) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import webbrowser
>>> filename = 'test.html'
>>> webbrowser.open('file://'+filename)
True
>>> print(webbrowser.get().__class__.__name__)
WindowsDefault

デフォルトのプログラムを確認しましたが、正しいようです。私はWin 7 SP1を使用しています。Chrome が起動しないのはなぜですか?

更新: コードは不明な OS とマシンで実行されるため、ハードコーディングやブラウザーの登録、またはパスの更新はオプションではありません。URLを解析してからチェックをfile://行うことが答えかもしれないと考えています。os.path.existsos.path.realpath

4

13 に答える 13

16

get(name)特定のブラウザを使用するために使用できます。

Chrome webbrowser を登録する必要があります。これは、事前定義されたブラウザ タイプの 1 つではないようです。その後、これを実行できるはずです。

webbrowser.get('chrome').open('http://www.google.com')

アップデート:

実際には、次のいずれかを実行できる場合があります。

webbrowser.get('windows-default').open('http://www.google.com') webbrowser.get('macosx').open('http://www.google.com')

ドキュメントには、Linux の事前定義されたデフォルトは示されていません。

于 2011-05-06T19:53:01.933 に答える
8

これにより、新しい Chrome タブが開きましたが、OS に依存しません。

webbrowser.get().open('http://www.google.com')

奇妙なのは、get()呼び出しがなくても IE を使用していることです。これは、簡単な回避策があるバグのようです。

于 2012-07-08T14:41:21.003 に答える
2

webbrowserモジュールはデフォルトのブラウザーを使用することになっているため、これはバグである可能性があります。一方、ドキュメントのこの説明を使用して、問題のトラブルシューティングを行います。

環境変数 BROWSER が存在する場合、ブラウザーのプラットフォームの既定のリストを上書きするように解釈され、os.pathsep で区切られたブラウザーのリストが順番に試行されます。リスト部分の値に文字列 %s が含まれている場合、%s の代わりに引数 URL を使用するリテラル ブラウザー コマンド ラインとして解釈されます。パーツに %s が含まれていない場合は、単に起動するブラウザの名前として解釈されます。

于 2011-05-06T19:54:29.447 に答える
1

モジュールのソース コードを見ると、最初に Windows の既定のブラウザーを使用しようとしますが、それが機能しない場合は、コマンドである一般的なブラウザー名を検索します。それは PATH 変数にあります。Web ブラウザの場所を PATH に追加してみてください。

于 2011-05-06T19:53:55.420 に答える
1

私はFirefoxでも同じ問題を抱えています。http://www.google.comは ff で開かれ、file:///test.html は IE で開かれます。

webbrowser doc言います:

一部のプラットフォームでは、この関数を使用してファイル名を開こうとすると、動作し、オペレーティング システムの関連プログラムが起動する場合があることに注意してください。ただし、これはサポートされておらず、移植性もありません。

于 2011-05-06T19:57:24.903 に答える
0

この問題file:///は、おそらくchromeに登録されていないプロトコルURLでのみ発生するため、os.startfile()(webbrowser.openがWindowsで最初に試行するもの)がInternetExplorerでそれらを開きます。他のブラウザをPATHに入れることは役に立たないと思います。なぜなら、パスでブラウザを試す前にos.startfile()が呼び出されるからです。

あなたができることhttp://は、レジストリ内のデフォルトのブラウザをチェックし(たとえば、レジ​​ストリキーをチェックすることによって)、 URLにそのブラウザをHKEY_CLASSES_ROOT\http\shell\open\command使用することです。file:///きれいではありませんが、動作するはずです。

import _winreg
import webbrowser
import shlex
import subprocess

def win_browser_open(url):
    if url.startswith('file:///'):
        browser = _winreg.QueryValue(_winreg.HKEY_CLASSES_ROOT, r'http\shell\open\command')
        browser = browser.replace('%1', url)
        subprocess.Popen(shlex.split(browser))
    else:
        webbrowser.open(url)
于 2011-05-06T20:06:11.030 に答える
0

すべての回答がこれ/私の問題を解決しなかったため、この方法でうまくいきました...(Windows)

コマンドは、単一の文字列ではなく、リストにする必要があります! (この場合、"start"、"filepath")、シェルも True である必要があります (Windows)

import subprocess
subprocess.Popen(['start', 'C:/Users/User/Desktop/convert_report.html'], shell=True)
于 2020-08-08T18:57:47.093 に答える
0

これを使って:

import webbrowser
webbrowser.get('windows-default').open('http://www.google.com')
于 2020-03-21T23:28:31.397 に答える