我试图在默认浏览器中从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并查看错误消息而不是浏览器来验证.
双方GenericBrowser并BackgroundBrowser会调用subprocess.Popen()同一个exe将取得成功,即使有错误的URL,并返回True.IE没有给出任何问题的迹象,所有其他浏览器都有一个很好的消息,说他们找不到该文件.
GenericBrowser由环境变量设置BROWSER并且是第一个.WindowsDefault 是第二个.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的预定义默认值.
这为我打开了一个新的Chrome标签,它仍然与操作系统无关:
webbrowser.get().open('http://www.google.com')
Run Code Online (Sandbox Code Playgroud)
奇怪的是,没有get()电话,它仍然使用IE浏览器.这看起来像一个简单的解决方法的错误.
简而言之,使用 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()都会导致它根本无法打开浏览器。
有点奇怪的行为,但我可以看到这是一个复杂的事情,而且很可能是操作系统造成了这种行为。
| 归档时间: |
|
| 查看次数: |
21581 次 |
| 最近记录: |