当前位置: 首页 > 面试题库 >

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

杭昊空
2023-03-14
问题内容

我正在尝试在默认浏览器中从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

我检查了我的默认程序,它们看起来正确。我正在使用Win 7 SP1。为什么Chrome无法启动?

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


问题答案:

我的主要问题是通过尝试file://在相对路径前添加一个错误的URL 。可以用以下方法解决:

webbrowser.open('file://' + os.path.realpath(filename))

使用webbrowser.open将尝试多种方法,直到一个“成功”为止,这是一个宽松的定义。

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

两者GenericBrowserBackgroundBrowser都将subprocess.Popen()使用exe调用,即使该URL错误,该exe也会成功执行,然后返回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>])]
>>>

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

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>])]
>>>

webbrowser._tryorder给试图浏览器的列表。注册chrome或添加BROWSER env
var或修改我的路径都会使我获得正确的浏览器,并显示更好的错误消息。

感谢您的帮助,没有您的想法我无法解决。



 类似资料:
  • 将带有的文本视图设置为,我可以打开链接,浏览器显示网页。 我需要调用另一个活动,该活动将使用其webView进行操作,而不是离开应用程序。 重要提示: 更改文本视图内容不是一个选项,我需要让链接与它们的方案保持一致, 文本视图中有很多文本,不仅仅是链接 我查看了和,可能遗漏了一些内容,但看起来似乎没什么帮助。 那么,在中拦截触摸链接的任何选项都可以在不打开浏览器的情况下进行操作吗? 如果你想提到这

  • 许多事件会自动触发浏览器执行某些行为。 例如: 点击一个链接 —— 触发导航(navigation)到该 URL。 点击表单的提交按钮 —— 触发提交到服务器的行为。 在文本上按下鼠标按钮并移动 —— 选中文本。 如果我们使用 JavaScript 处理一个事件,那么我们通常不希望发生相应的浏览器行为。而是想要实现其他行为进行替代。 阻止浏览器行为 有两种方式来告诉浏览器我们不希望它执行默认行为:

  • 问题内容: 我正在用Python开发一个小项目。它分为两个部分。 第一部分负责爬网并提取一些信息并将其插入数据库。 第二部分负责使用数据库来呈现那些信息。这两部分共享数据库。在第二部分中,我使用Flask框架以一些格式,样式等将信息显示为html,以使其看起来更整洁。 这两部分的源文件都在同一个程序包中,但是要正确运行此程序,用户必须像这样分别运行搜寻器和结果表示器: python crawler

  • 我使用以下命令在同一台计算机上启动了集线器和节点: 我尝试使用以下代码实例化一个浏览器窗口: 页面获取成功,我可以使用browser.page看到页面的超文本标记语言代码_source但是节点上的Chrome窗口没有打开。我根本没有指定无头选项。我使用的是95版Chrome和Chromedrive。 请注意,我是在jupyter笔记本上运行代码的,该笔记本托管在充当selenium服务器和节点的同

  • 我有以下场景:安装了firefox和chrome的Ubuntu16.04机器,chrome是我的默认浏览器。 我在shell中检查以下操作: 并且不会出现firefox的任何一面,总是Chrome。这样很好。还要检查: 点击桌面文件。html->chrome启动 现在奇怪的是,如果我跑了: 出于某种奇怪的原因,它总是打开Firefox。我不知道为什么,有人能帮我吗?

  • 本文向大家介绍python使用webbrowser浏览指定url的方法,包括了python使用webbrowser浏览指定url的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python使用webbrowser浏览指定url的方法。分享给大家供大家参考。具体如下: 这段代码提示用户输入关键词,通过webbrowser打开浏览器浏览google 搜索用户输入的关键词 希望本文所述对大