python的webbrowser在Windows 7上启动IE而不是默认

McL*_*old 33 python browser

我试图在默认浏览器中从python启动本地html文件.现在我的默认值是谷歌浏览器.如果我双击.html文件,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
Run Code Online (Sandbox Code Playgroud)

我检查了我的默认程序,看起来没错.我在Win 7 SP1上.为什么镀铬没有启动?

更新:代码将在未知的操作系统和计算机上运行,​​因此注册浏览器或路径更新不是选项.我正在考虑解析网址file://,然后进行os.path.exists检查,os.path.realpath可能就是答案.

McL*_*old 22

我的主要问题是尝试file://在相对路径前添加一个错误的URL .它可以修复:

webbrowser.open('file://' + os.path.realpath(filename))
Run Code Online (Sandbox Code Playgroud)

使用webbrowser.open将尝试多种方法,直到一个"成功",这是一个松散的定义.

WindowsDefault类调用os.startfile()它失败并返回False.我可以通过在windows run命令中输入URL并查看错误消息而不是浏览器来验证.

双方GenericBrowserBackgroundBrowser会调用subprocess.Popen()同一个exe将取得成功,即使有错误的URL,并返回True.IE没有给出任何问题的迹象,所有其他浏览器都有一个很好的消息,说他们找不到该文件.

  1. GenericBrowser由环境变量设置BROWSER并且是第一个.
  2. WindowsDefault 是第二个.
  3. BackgroundBrowser 是最后一个,包括后退IE,如果没有其他工作.

这是我原来的设置:

>>> import webbrowser
>>> webbrowser._tryorder
['windows-default',
 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE']
>>> webbrowser._browsers.items()
[('windows-default', [<class 'webbrowser.WindowsDefault'>, None]),
 ('c:\\program files\\internet explorer\\iexplore.exe', [None, <webbrowser.BackgroundBrowser object at 0x00000000022E3898>])]
>>>
Run Code Online (Sandbox Code Playgroud)

这是修改环境变量后的设置:

C:>path=C:\Program Files (x86)\Mozilla Firefox;%path%

C:>set BROWSER=C:\Users\Scott\AppData\Local\Google\Chrome\Application\chrome.exe

C:>python
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
>>> webbrowser._tryorder
['C:\\Users\\Scott\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe',
 'windows-default',
 'firefox',
 'C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE']
>>> webbrowser._browsers.items()
[('windows-default', [<class 'webbrowser.WindowsDefault'>, None]),
 ('c:\\program files\\internet explorer\\iexplore.exe',[None, <webbrowser.BackgroundBrowser object at 0x000000000235E828>]),
 ('firefox', [None, <webbrowser.BackgroundBrowser object at 0x000000000235E780>]),
 ('c:\\users\\scott\\appdata\\local\\google\\chrome\\application\\chrome.exe', [None, <webbrowser.GenericBrowser object at 0x000000000235E8D0>])]
>>>
Run Code Online (Sandbox Code Playgroud)

webbrowser._tryorder给试图浏览器的列表.注册chrome或添加BROWSER env var或修改我的路径都可以让我得到正确的浏览器,并提供更好的错误消息.

感谢帮助人员,没有你的想法,我无法解决这个问题.


Aco*_*orn 14

您可以使用get(name)特定的浏览器.

您需要注册Chrome网络浏览器,因为它似乎不是预定义的浏览器类型之一,然后您应该能够执行此操作:

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的预定义默认值.


Joe*_*Joe 7

这为我打开了一个新的Chrome标签,它仍然与操作系统无关:

webbrowser.get().open('http://www.google.com')
Run Code Online (Sandbox Code Playgroud)

奇怪的是,没有get()电话,它仍然使用IE浏览器.这看起来像一个简单的解决方法的错误.

  • 您正在打开一个 http 资源。问题是关于打开文件资源,差异很重要,我认为 (2认同)

Zac*_*ine 5

简而言之,使用 Windows 10,格式中不包含完整 URL 的所有内容都https://example.com可以在 IE 中打开。例如,如果我说

webbrowser.open("https://www.example.com")
Run Code Online (Sandbox Code Playgroud)

它将在 Chrome 中打开一个新选项卡,同时

webbrowser.open("example.com")
Run Code Online (Sandbox Code Playgroud)

将打开 IE。任何.get()都会导致它根本无法打开浏览器。

有点奇怪的行为,但我可以看到这是一个复杂的事情,而且很可能是操作系统造成了这种行为。