Python webbrowserとは?ブラウザでURLを開く方法

webbrowserは、既定のブラウザでURLを開く標準ライブラリです。

スクリプトの処理が終わったら結果のページを開く、ローカルで生成したHTMLをすぐ確認する、といった用途で使います。


1行で開く

import webbrowser

webbrowser.open("https://techgym.jp/")

戻り値は True / False です。開けたと判断できればTrueが返ります。ただしブラウザを起動できたかどうかであって、ページが表示できたかは分かりません。


新しいウィンドウとタブ

  • open(url) … 既定の動作(多くの環境では新しいタブ)
  • open_new(url) … 新しいウィンドウで開こうとする
  • open_new_tab(url) … 新しいタブで開こうとする

いずれも「開こうとする」までです。実際にウィンドウになるかタブになるかはブラウザ側の設定に左右されます。

open()にはnew引数もあり、new=1でウィンドウ、new=2でタブを要求します。


ローカルのファイルを開く

import webbrowser, pathlib

path = pathlib.Path("report.html").resolve()
webbrowser.open(path.as_uri())

ファイルパスをそのまま渡すと環境によって失敗します。as_uri()でfile:///...の形に変換してから渡すのが確実です。

Windowsのパスに含まれる円記号や、日本語のファイル名もこれで正しく扱えます。


どのブラウザが使われるのか

import webbrowser

b = webbrowser.get()
print(type(b).__name__)

実行結果:

MacOSXOSAScript

返るクラス名はOSによって変わります。macOSでは上のようになり、LinuxではBackgroundBrowserなど、インストール状況に応じたものが返ります。

ブラウザを指定することもできます。

webbrowser.get("firefox").open("https://techgym.jp/")
webbrowser.get("chrome").open("https://techgym.jp/")

指定したブラウザが無いとき

try:
    webbrowser.get("no-such-browser")
except Exception as e:
    print(type(e).__name__, "->", e)

実行結果:

Error -> could not locate runnable browser

webbrowser.Errorが飛びます。環境によって入っているブラウザは違うので、名前を決め打ちするなら例外処理を付けてください。

import webbrowser

for name in ("chrome", "firefox", None):
    try:
        browser = webbrowser.get(name)
        break
    except webbrowser.Error:
        continue
browser.open("https://techgym.jp/")

get(None)は既定のブラウザを意味するので、最後の保険として置いています。


サーバーでは使えない

画面の無い環境では当然開けません。Webアプリやバッチの中で呼ぶと、環境によってはテキストブラウザが起動してプロセスが止まることさえあります。

使う場所は手元で動かす開発用スクリプトやCLIツールに限定してください。判定を入れるならこうします。

import os, sys, webbrowser

def open_if_possible(url):
    if not sys.stdout.isatty():
        print("ブラウザは開きません:", url)
        return False
    if sys.platform.startswith("linux") and not os.environ.get("DISPLAY"):
        print("ブラウザは開きません:", url)
        return False
    return webbrowser.open(url)

まとめ

  • webbrowser.open(url)の1行で開ける
  • 戻り値はブラウザを起動できたかどうか。表示の成否は分からない
  • ローカルファイルはPath.as_uri()で渡す
  • 画面の無い環境では使わない

関連記事

あわせて読むと理解が深まります。

対面・無料|東京・永田町で毎週土曜日13時

1回の参加で、プログラミングの構造がわかる

ゼロからはじめるPython入門講座

8年間・累計600回開催/これまで全国で2万人以上が参加

「やはり対面で聞けるのはとても気づきがあり、価値があると思います」

参加者の声

  • 本当に初心者からの講座です。プログラミングに触ったことがなくて大丈夫です
  • 対面だから、その場で聞けます。つまずいた所を持ち帰らずに解決できます
  • 講座は1時間。そのあとも残って学習を続けられ、講師にも質問できます
  • 独学で挫折した方も。糸口が見つかって、講座のあと会員になる方が多くいます

無料で参加する|開催日程を見る

参加費は無料です