# 21.1. `webbrowser` — 方便的浏览器操作库

源代码： Lib / webbrowser.py

`webbrowser` 模块提供了一个可以向用户展示Web文档的高级接口。在绝大多数情况下，使用本模块的`open()` 函数即可。

在Unix环境下，图形浏览器通常依赖 X11，当图形浏览器不可用或X11不可用时，文本模式的浏览器就派上用场了。如果使用文本模式的浏览器，则调用进程将阻塞直到用户退出浏览器（译注：本句需要更易于理解的翻译）。

如果环境变量 `BROWSER`存在，它被解释为`os.pathsep`-separated list of browsers to try ahead of the platform defaults.当列表部分的值包含字符串`%s`时，它被解释为要与参数URL替换为`%s`一起使用的字面值浏览器命令行；如果该部分不包含`%s`，它只是被解释为要启动的浏览器的名称。[1]

对于非Unix平台，或当Unix上有远程浏览器时，控制进程不会等待用户完成浏览器，但允许远程浏览器在显示器上保持自己的窗口。如果远程浏览器在Unix上不可用，则控制进程将启动一个新的浏览器并等待。

脚本webbrowser 可以用作命令行接口。它接受 URL 作为参数。它也接受如下可选参数：`-n` 如果可以，在新浏览器窗口打开URL； `-t` 在浏览器新标签页（TAB）打开URL。当然，这两个选项是互斥的，不可共存。用法示例︰

    python -m webbrowser -t "http://www.python.org"

异常定义：

exception `webbrowser.``Error`

  浏览器控制引发的异常。

可用函数：

`webbrowser.``open`(url, new=0, autoraise=True)

  调用默认浏览器打开 url 。如果new参数为0，将尽可能在同一个浏览器窗口打开 url。如果new参数为1，将使用新的浏览器窗口打开指定url。如果 new参数为2，则使用新浏览器标签页（TAB）打开。如果autoraise是`True`，则窗口会被调用（请注意，在许多窗口管理器下，不管此变量的设置如何）。

  请注意，在某些平台上，尝试使用此函数打开文件名，可能会工作并启动操作系统的关联程序。但是，这既不支持也不便携。

`webbrowser.``open_new`(url)

  如果可能，在默认浏览器的新窗口中打开url，否则，在唯一的浏览器窗口中打开url。

`webbrowser.``open_new_tab`(url)

  如果可能，在默认浏览器的新页面（“标签”）中打开url，否则等效于`open_new()`

`webbrowser.``get`(using=None)

  使用返回浏览器类型的控制器对象。如果使用为`None`，则返回适用于调用方环境的默认浏览器的控制器。

`webbrowser.``register`(name, constructor, instance=None)

  注册浏览器类型名称。一旦注册了浏览器类型，`get()`函数可以返回该浏览器类型的控制器。如果未提供实例或者`None`，则会调用构造函数，而无需创建实例。如果提供实例，则构造函数将永远不被调用，并且可以是`None`。

  此入口点仅在计划设置 `BROWSER`变量或调用`get()`时使用非空参数匹配处理程序。

预定义了多种浏览器类型。该表给出可以传递到`get()`函数的类型名称以及控制器类的对应实例化，这些都在本模块中定义。

类型名称 | 类名称 | 备注
--- | --- | ---
`'mozilla'` | `Mozilla('mozilla')` |
`'firefox'` | `Mozilla('mozilla')` |
`'netscape'` | `Mozilla('netscape')` |
`'galeon'` | `Galeon('galeon')` |
`'epiphany'` | `Galeon('epiphany')` |
`'skipstone'` | `BackgroundBrowser('skipstone')` |
`'kfmclient'` | `Konqueror()` | （1）
`'konqueror'` | `Konqueror()` | （1）
`'kfm'` | `Konqueror()` | （1）
`'mosaic'` | `BackgroundBrowser('mosaic')` |
`'opera'` | `Opera()` |
`'grail'` | `Grail()` |
`'links'` | `GenericBrowser('links')` |
`'elinks'` | `Elinks('elinks')` |
`'lynx'` | `GenericBrowser('lynx')` |
`'w3m'` | `GenericBrowser('w3m')` |
`'windows-default'` | `WindowsDefault` | （2）
`'macosx'` | `MacOSX('default')` | （3）
`'safari'` | `MacOSX('safari')` | （3）
`'google-chrome'` | `Chrome('google-chrome')` |
`'chrome'` | `Chrome('chrome')` |
`'chromium'` | `Chromium('chromium')` |
`'chromium-browser'` | `Chromium('chromium-browser')` |

备注：

1. “Konqueror”是Unix的KDE桌面环境的文件管理器，只有在KDE正在运行时才有意义。一些可靠的检测KDE的方法会很好； `KDEDIR`变量不足。还要注意，即使在使用带有KDE 2的konqueror命令时也使用名称“kfm” - 实现选择了运行Konqueror的最佳策略。
2. 仅在Windows平台上。
3. 仅在Mac OS X平台上。

版本3.3中的新功能：已添加对Chrome / Chromium的支持。

这里有一些简单的例子：

    url = 'http://docs.python.org/'

    # Open URL in a new tab, if a browser window is already open.
    webbrowser.open_new_tab(url)

    # Open URL in new window, raising the window if possible.
    webbrowser.open_new(url)

## 21.1.1. Browser Controller Objects

浏览器控制器提供了这些方法，它们并行了三个模块级的便利功能：

`controller.``open`(url, new=0, autoraise=True)

  使用此控制器处理的浏览器显示url。如果new为1，则尽可能打开新的浏览器窗口。如果new为2，则尽可能打开新的浏览器页面（“选项卡”）。

`controller.``open_new`(url)

  如果可能，在此控制器处理的浏览器的新窗口中打开url，否则在唯一的浏览器窗口中打开url。别名`open_new()`。

`controller.``open_new_tab`(url)

  如果可能，在此控制器处理的浏览器的新页面（“标签”）中打开url，否则等效于`open_new()`

脚注

[1] | 将在 `PATH`