| :mod:`!webbrowser` --- Convenient web-browser controller | |
| ======================================================== | |
| .. module:: webbrowser | |
| :synopsis: Easy-to-use controller for web browsers. | |
| **Source code:** :source:`Lib/webbrowser.py` | |
| -------------- | |
| The :mod:`!webbrowser` module provides a high-level interface to allow displaying | |
| web-based documents to users. Under most circumstances, simply calling the | |
| :func:`.open` function from this module will do the right thing. | |
| Under Unix, graphical browsers are preferred under X11, but text-mode browsers | |
| will be used if graphical browsers are not available or an X11 display isn't | |
| available. If text-mode browsers are used, the calling process will block until | |
| the user exits the browser. | |
| If the environment variable :envvar:`BROWSER` exists, it is interpreted as the | |
| :data:`os.pathsep`-separated list of browsers to try ahead of the platform | |
| defaults. When the value of a list part contains the string ``%s``, then it is | |
| interpreted as a literal browser command line to be used with the argument URL | |
| substituted for ``%s``; if the value is a single word that refers to one of the | |
| already registered browsers this browser is added to the front of the search list; | |
| if the part does not contain ``%s``, it is simply interpreted as the name of the | |
| browser to launch. [1]_ | |
| .. versionchanged:: 3.14 | |
| The :envvar:`BROWSER` variable can now also be used to reorder the list of | |
| platform defaults. This is particularly useful on macOS where the platform | |
| defaults do not refer to command-line tools on :envvar:`PATH`. | |
| For non-Unix platforms, or when a remote browser is available on Unix, the | |
| controlling process will not wait for the user to finish with the browser, but | |
| allow the remote browser to maintain its own windows on the display. If remote | |
| browsers are not available on Unix, the controlling process will launch a new | |
| browser and wait. | |
| On iOS, the :envvar:`BROWSER` environment variable, as well as any arguments | |
| controlling autoraise, browser preference, and new tab/window creation will be | |
| ignored. Web pages will *always* be opened in the user's preferred browser, in | |
| a new tab, with the browser being brought to the foreground. The use of the | |
| :mod:`!webbrowser` module on iOS requires the :mod:`ctypes` module. If | |
| :mod:`ctypes` isn't available, calls to :func:`.open` will fail. | |
| .. _webbrowser-cli: | |
| Command-line interface | |
| ---------------------- | |
| .. program:: webbrowser | |
| The script :program:`webbrowser` can be used as a command-line interface for the | |
| module. It accepts a URL as the argument. It accepts the following optional | |
| parameters: | |
| .. option:: -n, --new-window | |
| Opens the URL in a new browser window, if possible. | |
| .. option:: -t, --new-tab | |
| Opens the URL in a new browser tab. | |
| The options are, naturally, mutually exclusive. Usage example: | |
| .. code-block:: bash | |
| python -m webbrowser -t "https://www.python.org" | |
| .. availability:: not WASI, not Android. | |
| The following exception is defined: | |
| .. exception:: Error | |
| Exception raised when a browser control error occurs. | |
| The following functions are defined: | |
| .. function:: open(url, new=0, autoraise=True) | |
| Display *url* using the default browser. If *new* is 0, the *url* is opened | |
| in the same browser window if possible. If *new* is 1, a new browser window | |
| is opened if possible. If *new* is 2, a new browser page ("tab") is opened | |
| if possible. If *autoraise* is ``True``, the window is raised if possible | |
| (note that under many window managers this will occur regardless of the | |
| setting of this variable). | |
| Returns ``True`` if a browser was successfully launched, ``False`` otherwise. | |
| Note that on some platforms, trying to open a filename using this function, | |
| may work and start the operating system's associated program. However, this | |
| is neither supported nor portable. | |
| .. audit-event:: webbrowser.open url webbrowser.open | |
| .. function:: open_new(url) | |
| Open *url* in a new window of the default browser, if possible, otherwise, open | |
| *url* in the only browser window. | |
| Returns ``True`` if a browser was successfully launched, ``False`` otherwise. | |
| .. function:: open_new_tab(url) | |
| Open *url* in a new page ("tab") of the default browser, if possible, otherwise | |
| equivalent to :func:`open_new`. | |
| Returns ``True`` if a browser was successfully launched, ``False`` otherwise. | |
| .. function:: get(using=None) | |
| Return a controller object for the browser type *using*. If *using* is | |
| ``None``, return a controller for a default browser appropriate to the | |
| caller's environment. | |
| .. function:: register(name, constructor, instance=None, *, preferred=False) | |
| Register the browser type *name*. Once a browser type is registered, the | |
| :func:`get` function can return a controller for that browser type. If | |
| *instance* is not provided, or is ``None``, *constructor* will be called without | |
| parameters to create an instance when needed. If *instance* is provided, | |
| *constructor* will never be called, and may be ``None``. | |
| Setting *preferred* to ``True`` makes this browser a preferred result for | |
| a :func:`get` call with no argument. Otherwise, this entry point is only | |
| useful if you plan to either set the :envvar:`BROWSER` variable or call | |
| :func:`get` with a nonempty argument matching the name of a handler you | |
| declare. | |
| .. versionchanged:: 3.7 | |
| *preferred* keyword-only parameter was added. | |
| A number of browser types are predefined. This table gives the type names that | |
| may be passed to the :func:`get` function and the corresponding instantiations | |
| for the controller classes, all defined in this module. | |
| +------------------------+-----------------------------------------+-------+ | |
| | Type Name | Class Name | Notes | | |
| +========================+=========================================+=======+ | |
| | ``'mozilla'`` | ``Mozilla('mozilla')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'firefox'`` | ``Mozilla('mozilla')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'epiphany'`` | ``Epiphany('epiphany')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'kfmclient'`` | ``Konqueror()`` | \(1) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'konqueror'`` | ``Konqueror()`` | \(1) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'kfm'`` | ``Konqueror()`` | \(1) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'opera'`` | ``Opera()`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'links'`` | ``GenericBrowser('links')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'elinks'`` | ``Elinks('elinks')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'lynx'`` | ``GenericBrowser('lynx')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'w3m'`` | ``GenericBrowser('w3m')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'windows-default'`` | ``WindowsDefault`` | \(2) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'macos'`` | ``MacOS('default')`` | \(3) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'safari'`` | ``MacOS('safari')`` | \(3) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'chrome'`` | ``MacOS('google chrome')`` | \(3) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'firefox'`` | ``MacOS('firefox')`` | \(3) | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'google-chrome'`` | ``Chrome('google-chrome')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'chromium'`` | ``Chromium('chromium')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'chromium-browser'`` | ``Chromium('chromium-browser')`` | | | |
| +------------------------+-----------------------------------------+-------+ | |
| | ``'iosbrowser'`` | ``IOSBrowser`` | \(4) | | |
| +------------------------+-----------------------------------------+-------+ | |
| Notes: | |
| (1) | |
| "Konqueror" is the file manager for the KDE desktop environment for Unix, and | |
| only makes sense to use if KDE is running. Some way of reliably detecting KDE | |
| would be nice; the :envvar:`!KDEDIR` variable is not sufficient. Note also that | |
| the name "kfm" is used even when using the :program:`konqueror` command with KDE | |
| 2 --- the implementation selects the best strategy for running Konqueror. | |
| (2) | |
| Only on Windows platforms. | |
| (3) | |
| Only on macOS. | |
| (4) | |
| Only on iOS. | |
| .. versionadded:: 3.2 | |
| A new :class:`!MacOSXOSAScript` class has been added | |
| and is used on Mac instead of the previous :class:`!MacOSX` class. | |
| This adds support for opening browsers not currently set as the OS default. | |
| .. versionadded:: 3.3 | |
| Support for Chrome/Chromium has been added. | |
| .. versionchanged:: 3.12 | |
| Support for several obsolete browsers has been removed. | |
| Removed browsers include Grail, Mosaic, Netscape, Galeon, | |
| Skipstone, Iceape, and Firefox versions 35 and below. | |
| .. versionchanged:: 3.13 | |
| Support for iOS has been added. | |
| .. versionadded:: 3.15 | |
| :class:`!MacOS` has been added as a replacement for :class:`!MacOSXOSAScript`, | |
| opening browsers via :program:`/usr/bin/open` instead of :program:`osascript`. | |
| .. deprecated-removed:: 3.15 3.17 | |
| :class:`!MacOSXOSAScript` is deprecated in favour of :class:`!MacOS`. | |
| Using :program:`/usr/bin/open` instead of :program:`osascript` is a | |
| security and usability improvement: :program:`osascript` may be blocked | |
| on managed systems due to its abuse potential as a general-purpose | |
| scripting interpreter. | |
| Here are some simple examples:: | |
| url = 'https://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) | |
| .. _browser-controllers: | |
| Browser controller objects | |
| -------------------------- | |
| Browser controllers provide the :attr:`~controller.name` attribute, | |
| and the following three methods which parallel module-level convenience functions: | |
| .. attribute:: controller.name | |
| System-dependent name for the browser. | |
| .. method:: controller.open(url, new=0, autoraise=True) | |
| Display *url* using the browser handled by this controller. If *new* is 1, a new | |
| browser window is opened if possible. If *new* is 2, a new browser page ("tab") | |
| is opened if possible. | |
| .. method:: controller.open_new(url) | |
| Open *url* in a new window of the browser handled by this controller, if | |
| possible, otherwise, open *url* in the only browser window. Alias | |
| :func:`open_new`. | |
| .. method:: controller.open_new_tab(url) | |
| Open *url* in a new page ("tab") of the browser handled by this controller, if | |
| possible, otherwise equivalent to :func:`open_new`. | |
| .. rubric:: Footnotes | |
| .. [1] Executables named here without a full path will be searched in the | |
| directories given in the :envvar:`PATH` environment variable. |