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()で渡す - 画面の無い環境では使わない
関連記事
あわせて読むと理解が深まります。




