2014-09-16 1 views
2

Я пытаюсь зарегистрировать браузер Firefox для работы в Windows. Согласно документации для Webbrowser: «Если существует переменная среды BROWSER, она интерпретируется как переопределяющая список браузеров по умолчанию для платформы, в качестве списка браузеров, разделенных os.pathsep, чтобы попробовать по порядку». У меня есть следующее:Как установить переменную окружения BROWSER для python webbrowser

import os 
import webbrowser 
from subprocess import call 

os.environ["BROWSER"] = "C:\\FirefoxPortable\\FirefoxPortable.exe" 
webbrowser.open('http://google.com') 

Это все еще открывает iexplorer (браузер по умолчанию).

также:

>>> webbrowser._browsers 
{'windows-default': [<class 'webbrowser.WindowsDefault'>, None], 'c:\\program files\\internet explorer\\iexplore.exe': [None, <webbrowser.BackgroundBrowser object at 0x04A18F90>]} 
>>> webbrowser._tryorder 
['windows-default', 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE'] 

Как я могу использовать Firefox здесь?

Источник:

# OK, now that we know what the default preference orders for each 
# platform are, allow user to override them with the BROWSER variable. 
if "BROWSER" in os.environ: 
    _userchoices = os.environ["BROWSER"].split(os.pathsep) 
    _userchoices.reverse() 

    # Treat choices in same way as if passed into get() but do register 
    # and prepend to _tryorder 
    for cmdline in _userchoices: 
     if cmdline != '': 
      cmd = _synthesize(cmdline, -1) 
      if cmd[1] is None: 
       register(cmdline, None, GenericBrowser(cmdline), -1) 
    cmdline = None # to make del work if _userchoices was empty 
    del cmdline 
    del _userchoices 

# what to do if _tryorder is now empty? 
+1

Предполагая, что путь к исполняемому файлу действителен, то, что у вас есть, должно работать. Источник для модуля 'webbrowser' включен в дистрибутив Python и находится в' C: \ PythonX \ Lib \ webbrowser.py', поэтому вы можете сделать копию его для целей отладки, чтобы найти проблему. Найдите строку 'if" BROWSER "в os.environ:'. – martineau

+0

спасибо, что это очень полезная информация. глядя на источник (я включил его выше), я не вижу очевидной проблемы, хотя я подозреваю, что это связано с функцией register. Я попытался установить точку останова в самом коде модуля webbrowser, но это не вызывает перерыва. Возможно ли это, как вы выполняете более сложный код с помощью python? - Билл – user61629

+0

Предполагая, что вы правильно установили точку останова, это просто звучит так, как код модуля «webbrowser», где он был помещен, никогда не исполнялся, поэтому попробуйте выяснить, как это происходит. Я не знаю, где вы поставили точку останова, но, возможно, '' BROWSER'' не был в 'os.environ' ... – martineau

ответ

2

Попробуйте следующий код:

webbrowser.register('firefox', None, webbrowser.GenericBrowser('C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe')) 
a=webbrowser.get('firefox') 
a.open("www.google.com")­­­­­ 
+1

Просьба привести некоторое сопроводительное описание и кодовое цитирование вашего ответа – Bendy

2

Пробовал ваш пример и получил тот же результат: открывалась в IE, а не в Firefox. Причина в том, что при времени импорта webbrowser переменная среды BROWSER еще не установлена. Простое переупорядочение:

import os 
# put it **before** importing webbroser 
os.environ["BROWSER"] = "C:\\FirefoxPortable\\FirefoxPortable.exe" 
import webbrowser 
# from subprocess import call 

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

сейчас он работает. Я понял, что, пытаясь установить переменную окружения в командной строке. Примечание: Это не сработало, имеющие путь в кавычки

set BROWSER=C:\FirefoxPortable\FirefoxPortable.exe 

сделал работу,

set BROWSER="C:\FirefoxPortable\FirefoxPortable.exe" 

не сделал. Извините за поздний ответ, но диагностика с

>>> webbrowser._browsers 
>>> webbrowser._tryorder 

было очень полезно, спасибо.

+0

Мне нужно будет изучить это позже, но спасибо за ответ. – user61629