17db96d56Sopenharmony_ci:mod:`webbrowser` --- Convenient web-browser controller
27db96d56Sopenharmony_ci=======================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: webbrowser
57db96d56Sopenharmony_ci   :synopsis: Easy-to-use controller for web browsers.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
87db96d56Sopenharmony_ci.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/webbrowser.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci--------------
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe :mod:`webbrowser` module provides a high-level interface to allow displaying
157db96d56Sopenharmony_ciweb-based documents to users. Under most circumstances, simply calling the
167db96d56Sopenharmony_ci:func:`.open` function from this module will do the right thing.
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciUnder Unix, graphical browsers are preferred under X11, but text-mode browsers
197db96d56Sopenharmony_ciwill be used if graphical browsers are not available or an X11 display isn't
207db96d56Sopenharmony_ciavailable.  If text-mode browsers are used, the calling process will block until
217db96d56Sopenharmony_cithe user exits the browser.
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciIf the environment variable :envvar:`BROWSER` exists, it is interpreted as the
247db96d56Sopenharmony_ci:data:`os.pathsep`-separated list of browsers to try ahead of the platform
257db96d56Sopenharmony_cidefaults.  When the value of a list part contains the string ``%s``, then it is
267db96d56Sopenharmony_ciinterpreted as a literal browser command line to be used with the argument URL
277db96d56Sopenharmony_cisubstituted for ``%s``; if the part does not contain ``%s``, it is simply
287db96d56Sopenharmony_ciinterpreted as the name of the browser to launch. [1]_
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ciFor non-Unix platforms, or when a remote browser is available on Unix, the
317db96d56Sopenharmony_cicontrolling process will not wait for the user to finish with the browser, but
327db96d56Sopenharmony_ciallow the remote browser to maintain its own windows on the display.  If remote
337db96d56Sopenharmony_cibrowsers are not available on Unix, the controlling process will launch a new
347db96d56Sopenharmony_cibrowser and wait.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ciThe script :program:`webbrowser` can be used as a command-line interface for the
377db96d56Sopenharmony_cimodule. It accepts a URL as the argument. It accepts the following optional
387db96d56Sopenharmony_ciparameters: ``-n`` opens the URL in a new browser window, if possible;
397db96d56Sopenharmony_ci``-t`` opens the URL in a new browser page ("tab"). The options are,
407db96d56Sopenharmony_cinaturally, mutually exclusive.  Usage example::
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci   python -m webbrowser -t "https://www.python.org"
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci.. include:: ../includes/wasm-notavail.rst
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ciThe following exception is defined:
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci.. exception:: Error
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci   Exception raised when a browser control error occurs.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ciThe following functions are defined:
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci.. function:: open(url, new=0, autoraise=True)
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci   Display *url* using the default browser. If *new* is 0, the *url* is opened
597db96d56Sopenharmony_ci   in the same browser window if possible.  If *new* is 1, a new browser window
607db96d56Sopenharmony_ci   is opened if possible.  If *new* is 2, a new browser page ("tab") is opened
617db96d56Sopenharmony_ci   if possible.  If *autoraise* is ``True``, the window is raised if possible
627db96d56Sopenharmony_ci   (note that under many window managers this will occur regardless of the
637db96d56Sopenharmony_ci   setting of this variable).
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci   Note that on some platforms, trying to open a filename using this function,
667db96d56Sopenharmony_ci   may work and start the operating system's associated program.  However, this
677db96d56Sopenharmony_ci   is neither supported nor portable.
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci   .. audit-event:: webbrowser.open url webbrowser.open
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci.. function:: open_new(url)
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci   Open *url* in a new window of the default browser, if possible, otherwise, open
757db96d56Sopenharmony_ci   *url* in the only browser window.
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci.. function:: open_new_tab(url)
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ci   Open *url* in a new page ("tab") of the default browser, if possible, otherwise
807db96d56Sopenharmony_ci   equivalent to :func:`open_new`.
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci.. function:: get(using=None)
847db96d56Sopenharmony_ci
857db96d56Sopenharmony_ci   Return a controller object for the browser type *using*.  If *using* is
867db96d56Sopenharmony_ci   ``None``, return a controller for a default browser appropriate to the
877db96d56Sopenharmony_ci   caller's environment.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ci.. function:: register(name, constructor, instance=None, *, preferred=False)
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci   Register the browser type *name*.  Once a browser type is registered, the
937db96d56Sopenharmony_ci   :func:`get` function can return a controller for that browser type.  If
947db96d56Sopenharmony_ci   *instance* is not provided, or is ``None``, *constructor* will be called without
957db96d56Sopenharmony_ci   parameters to create an instance when needed.  If *instance* is provided,
967db96d56Sopenharmony_ci   *constructor* will never be called, and may be ``None``.
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci   Setting *preferred* to ``True`` makes this browser a preferred result for
997db96d56Sopenharmony_ci   a :func:`get` call with no argument.  Otherwise, this entry point is only
1007db96d56Sopenharmony_ci   useful if you plan to either set the :envvar:`BROWSER` variable or call
1017db96d56Sopenharmony_ci   :func:`get` with a nonempty argument matching the name of a handler you
1027db96d56Sopenharmony_ci   declare.
1037db96d56Sopenharmony_ci
1047db96d56Sopenharmony_ci   .. versionchanged:: 3.7
1057db96d56Sopenharmony_ci      *preferred* keyword-only parameter was added.
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ciA number of browser types are predefined.  This table gives the type names that
1087db96d56Sopenharmony_cimay be passed to the :func:`get` function and the corresponding instantiations
1097db96d56Sopenharmony_cifor the controller classes, all defined in this module.
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1127db96d56Sopenharmony_ci| Type Name              | Class Name                              | Notes |
1137db96d56Sopenharmony_ci+========================+=========================================+=======+
1147db96d56Sopenharmony_ci| ``'mozilla'``          | :class:`Mozilla('mozilla')`             |       |
1157db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1167db96d56Sopenharmony_ci| ``'firefox'``          | :class:`Mozilla('mozilla')`             |       |
1177db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1187db96d56Sopenharmony_ci| ``'netscape'``         | :class:`Mozilla('netscape')`            |       |
1197db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1207db96d56Sopenharmony_ci| ``'galeon'``           | :class:`Galeon('galeon')`               |       |
1217db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1227db96d56Sopenharmony_ci| ``'epiphany'``         | :class:`Galeon('epiphany')`             |       |
1237db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1247db96d56Sopenharmony_ci| ``'skipstone'``        | :class:`BackgroundBrowser('skipstone')` |       |
1257db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1267db96d56Sopenharmony_ci| ``'kfmclient'``        | :class:`Konqueror()`                    | \(1)  |
1277db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1287db96d56Sopenharmony_ci| ``'konqueror'``        | :class:`Konqueror()`                    | \(1)  |
1297db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1307db96d56Sopenharmony_ci| ``'kfm'``              | :class:`Konqueror()`                    | \(1)  |
1317db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1327db96d56Sopenharmony_ci| ``'mosaic'``           | :class:`BackgroundBrowser('mosaic')`    |       |
1337db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1347db96d56Sopenharmony_ci| ``'opera'``            | :class:`Opera()`                        |       |
1357db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1367db96d56Sopenharmony_ci| ``'grail'``            | :class:`Grail()`                        |       |
1377db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1387db96d56Sopenharmony_ci| ``'links'``            | :class:`GenericBrowser('links')`        |       |
1397db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1407db96d56Sopenharmony_ci| ``'elinks'``           | :class:`Elinks('elinks')`               |       |
1417db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1427db96d56Sopenharmony_ci| ``'lynx'``             | :class:`GenericBrowser('lynx')`         |       |
1437db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1447db96d56Sopenharmony_ci| ``'w3m'``              | :class:`GenericBrowser('w3m')`          |       |
1457db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1467db96d56Sopenharmony_ci| ``'windows-default'``  | :class:`WindowsDefault`                 | \(2)  |
1477db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1487db96d56Sopenharmony_ci| ``'macosx'``           | :class:`MacOSXOSAScript('default')`     | \(3)  |
1497db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1507db96d56Sopenharmony_ci| ``'safari'``           | :class:`MacOSXOSAScript('safari')`      | \(3)  |
1517db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1527db96d56Sopenharmony_ci| ``'google-chrome'``    | :class:`Chrome('google-chrome')`        |       |
1537db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1547db96d56Sopenharmony_ci| ``'chrome'``           | :class:`Chrome('chrome')`               |       |
1557db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1567db96d56Sopenharmony_ci| ``'chromium'``         | :class:`Chromium('chromium')`           |       |
1577db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1587db96d56Sopenharmony_ci| ``'chromium-browser'`` | :class:`Chromium('chromium-browser')`   |       |
1597db96d56Sopenharmony_ci+------------------------+-----------------------------------------+-------+
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ciNotes:
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci(1)
1647db96d56Sopenharmony_ci   "Konqueror" is the file manager for the KDE desktop environment for Unix, and
1657db96d56Sopenharmony_ci   only makes sense to use if KDE is running.  Some way of reliably detecting KDE
1667db96d56Sopenharmony_ci   would be nice; the :envvar:`KDEDIR` variable is not sufficient.  Note also that
1677db96d56Sopenharmony_ci   the name "kfm" is used even when using the :program:`konqueror` command with KDE
1687db96d56Sopenharmony_ci   2 --- the implementation selects the best strategy for running Konqueror.
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci(2)
1717db96d56Sopenharmony_ci   Only on Windows platforms.
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci(3)
1747db96d56Sopenharmony_ci   Only on macOS platform.
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci.. versionadded:: 3.3
1777db96d56Sopenharmony_ci   Support for Chrome/Chromium has been added.
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci.. deprecated-removed:: 3.11 3.13
1807db96d56Sopenharmony_ci   :class:`MacOSX` is deprecated, use :class:`MacOSXOSAScript` instead.
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ciHere are some simple examples::
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci   url = 'https://docs.python.org/'
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci   # Open URL in a new tab, if a browser window is already open.
1877db96d56Sopenharmony_ci   webbrowser.open_new_tab(url)
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci   # Open URL in new window, raising the window if possible.
1907db96d56Sopenharmony_ci   webbrowser.open_new(url)
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci.. _browser-controllers:
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ciBrowser Controller Objects
1967db96d56Sopenharmony_ci--------------------------
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ciBrowser controllers provide these methods which parallel three of the
1997db96d56Sopenharmony_cimodule-level convenience functions:
2007db96d56Sopenharmony_ci
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci.. attribute:: name
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ci   System-dependent name for the browser.
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci
2077db96d56Sopenharmony_ci.. method:: controller.open(url, new=0, autoraise=True)
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci   Display *url* using the browser handled by this controller. If *new* is 1, a new
2107db96d56Sopenharmony_ci   browser window is opened if possible. If *new* is 2, a new browser page ("tab")
2117db96d56Sopenharmony_ci   is opened if possible.
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci.. method:: controller.open_new(url)
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci   Open *url* in a new window of the browser handled by this controller, if
2177db96d56Sopenharmony_ci   possible, otherwise, open *url* in the only browser window.  Alias
2187db96d56Sopenharmony_ci   :func:`open_new`.
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_ci.. method:: controller.open_new_tab(url)
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci   Open *url* in a new page ("tab") of the browser handled by this controller, if
2247db96d56Sopenharmony_ci   possible, otherwise equivalent to :func:`open_new`.
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci.. rubric:: Footnotes
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ci.. [1] Executables named here without a full path will be searched in the
2307db96d56Sopenharmony_ci       directories given in the :envvar:`PATH` environment variable.
231