web-dev-qa-db-ja.com

Python

私はPython 3.7.4 Windowsで3.7.4で記述されたプログラムをブラウザで開きます。デフォルトのブラウザを表示し、開くために使用するブラウザを変更する機会をユーザーに与えますとプログラム。

デフォルトのブラウザーは、プログラムが この手法 を使用して初期化されるときに検出されます。

from winreg import HKEY_CURRENT_USER, OpenKey, QueryValueEx

import webbroswer

reg_path = r'Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice'
chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
firefox_path = 'C:/Program Files (x86)/Mozilla Firefox/firefox.exe %s'

with OpenKey(HKEY_CURRENT_USER, reg_path) as key:
    print(QueryValueEx(key, 'ProgId'))
    thedefaultbrowser = (QueryValueEx(key, 'ProgId'))
    thedefaultbrowser = (thedefaultbrowser[0])
    thedefaultbrowser = (thedefaultbrowser[0:2])
    if thedefaultbrowser == "Fi":
        browser_path = firefox_path
    if thedefaultbrowser == "Ch":
        browser_path = chrome_path

そして、プログラムの後半で発生する無限ループの一部として、リンクは次のように開かれます。

while True:

    # [lots of GUI code that isn't relevant]

    event = input()

    if event == 'pleasegetmealinknao':
        x=open("C:/folder/atextfilewithalinkinit.txt", "r")
        the_url1 = x.read()
        webbrowser.get(browser_path).open(the_url1)
        x.close()     

同じループで、ブラウザーの種類を変更するためにユーザーからの入力を受け入れることができます。

    Elif event == "Firefox":
        browser_path = firefox_path
        continue
    Elif event == "Chrome":
        browser_path = chrome_path
        continue       

だから私はこれでうまくウェブページを開くことができます。その後、ブラウザーの種類を適切に変更し、新しくユーザーが選択したブラウザーで別のWebページを開くことができます。ただし、Windows 10のみです。

Windows 7では、Firefoxは美しく機能し、Chromeですが、Chromeがデフォルトとして設定されている場合のみが機能します。プログラムが実行される前のブラウザただし、プログラムが開始される前にFirefoxがデフォルトのブラウザとして設定されている場合は、switchto Chromeその後、Chromeで何かを開こうとすると、プログラムは非常に動揺して実行を停止します。クラッシュ、エラーメッセージ、トレースバックはありません。完全にフリーズし、難しい必要があります。 -restarted。開いたばかりの新しいブラウザーウィンドウを閉じることで、プログラムをフリーズした状態から救うことができますが、これはもちろんプログラムの目的に反します。

しかし、私がこのすべての派手なビジネスをスクラップして、次のようにデフォルトのブラウザーが何であっても受け入れる場合:

    if event == 'pleasegetmealinknao':
        x=open("C:/folder/atextfilewithalinkinit.txt", "r")
        the_url1 = x.read()
        webbrowser.open(the_url1)
        x.close()  

次に、選択したリンクは、Firefox、Chrome、Internet Explorerなど、システムのデフォルトブラウザーが何であっても問題なく開きます。

では、なぜこれが起こっているのか、そしてどうすれば修正できるのでしょうか?それとも、選択可能なブラウザという私の夢を埋めなければならないのでしょうか?

これは、Chromeがデフォルトのブラウザーではないことを検出し、ユーザーにデフォルトのブラウザー設定の変更を要求することと関係がある可能性があります。しかし、問題はPythonプログラムでこの動作を無視する方法を教えてください。これに関連するポップアップが常に表示されるとは限りません。

編集:さらにテストを行い、場合によってはWindows 7の動作パターンもWindows 10で発生しますが、常にそうとは限りません。これは、OSに厳密に関連しているのではなく、ブラウザに関連しているとさらに考えさせて、Chromeデフォルトのステータスを要求することと多くの関係がありますが、それについてやってください。

7
Kim Jiwoo

Windows 7がないため、この問題をテストできません。Chromeがデフォルトのブラウザかどうかを確認している場合は、コマンドラインスイッチchrome.exe --no-default-browser-check $link。ただし、python webbrowserモジュールを使用してこれを行うことはできないと思います。代わりに、サブプロセスまたはWindowsと互換性のあるターミナル対話モジュール(例:pbs)を使用してから呼び出す必要があります。ターミナル経由のウェブブラウザ https://pypi.org/project/pbs/

1
Sohrab T

Webbrowserモジュールを試しましたか?

import webbrowser
webbrowser.get('firefox %s').open('http://google.com')

ブラウザのリストとその名前がここに表示されます webbrowser docs

0
DRFeinberg

私が正しく理解した場合、デフォルトのブラウザではなく希望のブラウザでタブを開きたい場合は、getライブラリのwebbrowserメソッドを使用できます

私のために働く単純なコードは:

import webbrowser as wb

wb.get('google-chrome') #the return answer was : <webbrowser.Chrome object at 0x7fe787065a50>

wb.get('google-chrome').open('https://url')

サポートされているブラウザのリストは次のとおりです。

enter image description here

0
Hussein Beygi