Pythonの標準ライブラリwebbrowserを使えば、毎日開くURLをワンクリックで一括オープンできます。インストール不要・わずか30行のコードで、毎朝の面倒なサイト巡回を完全に自動化する方法を、実際に私が使っているコードで解説します。
毎朝パソコンを開いて、ポイントサイトにログインして、懸賞ページをチェックして、業務ツールにアクセスして……。この「毎日同じサイトを開く作業」、地味にめんどくさくないですか?
私はこの作業に毎朝3分ほど使っていました。たかが3分。でも1年で18時間。しかも毎日やるから精神的な負担もじわじわくる。ある日「Pythonで自動化できるのでは?」と思い立ち、スクリプトを書いてみたら、わずか30行程度のコードで完全に解決できました。
プログラミング初心者でも10分あれば動くものが作れるので、Python自動化の第一歩としてもおすすめです。
毎日同じURLを手動で開く苦痛に気づいた

自動化って、たいてい「もう手作業やりたくない」という怒りから始まります。私の場合もまさにそうでした。
ポイントサイト・懸賞・業務ツール…開くサイトは増え続ける
最初は2〜3サイトだったんです。ポイントサイトのログインボーナスと、ニュースサイト。「まあブックマークでいいか」と思っていました。
ところが、懸賞サイトを始めたり、新しい業務ツールが増えたりして、気づけば毎朝開くサイトが10個近くに膨れ上がっていました。
1つずつクリックして、ページが読み込まれるのを待って、また次をクリックして……。毎朝この単純作業にイライラする自分に気づいたのが、自動化のきっかけです。
ブックマークじゃダメだった理由
「ブックマークフォルダをまとめて開けばいいのでは?」と思った方もいるかもしれません。実際、Chromeにはフォルダ内のブックマークを一括で開く機能があります。
ただ、ブックマーク一括オープンには3つの不満がありました。
- ブラウザを使い分けられない:サイトAはChrome、サイトBはVivaldiで開きたい場合に対応できない
- 自動実行できない:パソコンを起動したら勝手に開いてほしいのに、ブックマークは手動操作が必須
- 管理が散らばる:URLの追加や削除がブラウザのUI操作になるので、一覧性が低い
特に「ブラウザの使い分け」は地味に重要です。ポイントサイトはログイン状態を保ちたいからVivaldiで、業務系はChromeでと分けている人、実は多いのではないでしょうか。
Python webbrowserモジュールでブラウザ操作を自動化する仕組み
ではどうやって自動化するのか。Pythonにはwebbrowserという、まさにこの用途にピッタリな標準ライブラリがあります。
webbrowserモジュールとは?標準ライブラリだからインストール不要
webbrowserモジュールは、Pythonに最初から入っている標準ライブラリです。pip installは不要で、インポートするだけですぐ使えます。
できることはシンプルで、「指定したURLをデフォルトのブラウザで開く」のが基本機能。たった2行で動きます。
import webbrowser
webbrowser.open("https://example.com")この2行でブラウザが立ち上がって、指定したURLが開きます。Seleniumのようにブラウザドライバーの設定も必要ないので、環境構築のハードルがほぼゼロ。Python自動化の入門として最適な理由の1つです。
URLリストをJSONで管理する設計にした理由
最初はPythonファイルにURLを直接書いていました。でもすぐに「URLを追加するたびにコードを編集するのはイケてない」と気づきました。
そこで、URLリストを外部のJSONファイルに切り出す設計に変更しました。
[
{ "url": "https://example.com", "name": "サンプルサイト" },
{ "url": "https://news.example.com", "name": "ニュースサイト" },
{ "url": "https://work.example.com", "name": "業務ツール", "browser": "Vivaldi" }
]JSONにした理由は3つあります。
- コードに触らずURLを管理できる:JSONファイルを編集するだけで追加・削除できる
- 一覧性が高い:どのサイトをどのブラウザで開くか、1ファイルで把握できる
- バリデーションしやすい:URLの形式チェックやキーの存在チェックをコード側で実装できる
「設定とロジックを分離する」のはプログラミングの基本ですが、こういう小さなスクリプトでもやっておくと後がラクです。
Python自動化のサンプルコードと使い方を解説
ここからは実際に動くサンプルコードを紹介します。コピペして少し修正すれば、すぐに自分の環境で使えます。
基本形:URLリストを読み込んで一括で開く
まずは最小限の構成です。JSONファイルからURLを読み込んで、順番にブラウザで開きます。
import json
import webbrowser
from pathlib import Path
# スクリプトと同じディレクトリにあるurls.jsonを読み込む
urls_file = Path(__file__).parent / "urls.json"
with open(urls_file, encoding="utf-8") as f:
entries = json.load(f)
for entry in entries:
webbrowser.open(entry["url"])
たった11行です。Path(__file__).parentを使うことで、スクリプトがどのディレクトリから実行されても正しくJSONファイルを見つけられます。
urls.jsonの中身はこんな感じで用意しておきましょう。
[
{ "url": "https://example.com", "name": "サンプルサイト" },
{ "url": "https://news.example.com", "name": "ニュースサイト" }
]ブラウザを指定して開く方法(Chrome・Vivaldi・Firefox)
webbrowser.open()はデフォルトブラウザで開きますが、特定のブラウザで開きたい場面もあります。macOSならopen -aコマンド、Linuxなら直接ブラウザコマンドを呼び出せます。
import platform
import subprocess
def open_url(url: str, browser: str | None) -> None:
"""URLを指定ブラウザで開く。browser未指定ならデフォルトブラウザを使う。"""
if browser is None:
webbrowser.open(url)
return
system = platform.system()
if system == "Darwin": # macOS
subprocess.run(["open", "-a", browser, url], check=True, timeout=30)
elif system == "Linux":
subprocess.run([browser, url], check=True, timeout=30)
elif system == "Windows":
subprocess.run(["start", "", "/D", browser, url], shell=True, check=True, timeout=30)
platform.system()でOSを判定しているので、macOS・Linux・Windowsのどれでも動きます。macOSのopen -aコマンドは、アプリ名を指定してファイルやURLを開ける便利なコマンドです。
サイトごとに別のブラウザを使い分ける工夫
ここが個人的にこだわったポイントです。JSONの各エントリにbrowserキーを追加すれば、サイトごとにブラウザを切り替えられます。
[
{ "url": "https://example.com", "name": "通常サイト" },
{ "url": "https://special.example.com", "name": "特定サイト", "browser": "Vivaldi" }
]コード側の優先順位は「JSONのbrowser指定 > コマンドライン引数 > デフォルトブラウザ」です。
for entry in entries:
browser = entry.get("browser") or args.browser
open_url(entry["url"], browser)普段はVivaldiを使いつつ、特定のサイトだけChromeで開くといった柔軟な運用ができます。コマンドラインで--browser Vivaldiを指定すれば、全サイトをまとめてVivaldiで開くことも可能です。個別指定がある場合はそちらが優先される仕組みです。
macOSで毎朝自動実行する設定方法
スクリプトが完成しても、毎朝手動でpythonコマンドを打つのでは本末転倒です。OSの機能を使って、完全に自動で実行されるようにしましょう。
launchdで毎日決まった時間に実行する
macOSにはlaunchdというタスクスケジューラが標準で搭載されています。plistファイルを1つ書けば、毎日指定した時刻にスクリプトを実行してくれます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.open-daily-urls</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/python3</string>
<string>/path/to/everyDayOpenSite.py</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>8</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>RunAtLoad</key>
<false/>
</dict>
</plist>
このファイルを~/Library/LaunchAgents/に保存し、以下のコマンドで登録します。
# plistを登録
launchctl load ~/Library/LaunchAgents/com.example.open-daily-urls.plist
# 手動で動作確認
launchctl start com.example.open-daily-urls
# 登録解除したい場合
launchctl unload ~/Library/LaunchAgents/com.example.open-daily-urls.plist
注意点として、Pythonのパスは仮想環境を使っている場合は.venv/bin/python3の絶対パスを指定してください。~やシェル変数は展開されないので、フルパスで書く必要があります。
私も最初は~でパスを書いてしまい、launchdが何も実行してくれないトラブルに遭いました。StandardErrorPathをplistに追加してエラーログを確認したところ、パスが見つからないのが原因でした。launchd設定では「すべてフルパスで書く」と覚えておくとハマりません。
Windowsならタスクスケジューラ、Linuxならcronで対応
macOS以外のOSでも、同じスクリプトを定期実行できます。
| OS | ツール | 設定方法 |
|---|---|---|
| macOS | launchd | plistファイルを作成してlaunchctl load |
| Windows | タスクスケジューラ | GUIで「基本タスクの作成」から設定 |
| Linux | cron | crontab -eで0 8 * * * python3 /path/to/script.pyを追加 |
Windowsのタスクスケジューラは「操作」でPythonの実行ファイルパスを指定し、「引数」にスクリプトのパスを入れます。Linuxのcronは1行書くだけなので最も手軽です。
よくあるエラーと対処法
実装してみると、意外なところでつまずくことがあります。よくあるエラーと対処法をまとめました。
webbrowser.openでブラウザが開かない場合
webbrowser.open()を実行してもブラウザが起動しない場合、以下を確認してください。
- デフォルトブラウザが設定されていない:OS側でデフォルトブラウザを設定する
- SSH接続やヘッドレス環境で実行している:GUIのないサーバー上ではブラウザを起動できない。ローカルPCで実行する
- ブラウザ指定時のアプリ名が間違っている:macOSの場合、
open -aに渡すアプリ名はApplicationsフォルダのアプリ名と完全一致させる必要がある(例: 「Google Chrome」)
launchdで実行されない場合のデバッグ方法
launchdにplistを登録しても実行されない場合は、以下の手順でデバッグします。
- plistの構文チェック:
plutil -lint ~/Library/LaunchAgents/com.example.open-daily-urls.plistでXMLエラーがないか確認する - StandardErrorPathの追加:plistに
StandardErrorPathキーを追加し、エラーログを出力先ファイルで確認する - Pythonパスの確認:
which python3で表示されるフルパスをplistに記載する。~や$HOMEは使えない - 手動実行でテスト:
launchctl start com.example.open-daily-urlsで手動実行し、エラーログを確認する
自動化して実際に生活がどう変わったか
「たかがURL開くだけでしょ?」と思うかもしれません。正直、私も最初は半信半疑でした。でも実際に1ヶ月運用してみると、想像以上に快適でした。
朝のルーティンから「開く作業」が消えた
朝パソコンを開くと、もう全部のサイトがタブに並んでいます。「えーと、次はどのサイトだっけ」と考える必要がない。脳のリソースをゼロにできるのが、思った以上に気持ちいい。
3分の作業が0秒になった、という話ではあるのですが、体感的には「朝の面倒なタスクが1つ消えた」という精神的な解放感のほうが大きかったです。人間、毎日やる小さなストレスほど効いてくるものなんですね。
1ヶ月で開いたサイトは延べ300回以上。すべて自動で、手を動かしたのはJSONに新しいURLを2回追加しただけでした。
URLの追加・削除がJSON編集だけで完結する快適さ
新しいポイントサイトに登録したとき、JSONファイルに1行追加するだけ。キャンペーンが終わったサイトは1行削除するだけ。ブラウザのブックマーク管理画面を開いてポチポチする必要がありません。
テキストエディタでサクッと編集できるのは本当にラクです。どのサイトをどのブラウザで開いているかも一覧でわかるので、管理が散らばらないのも嬉しいポイントです。
Python自動化の第一歩にURL自動起動をおすすめする3つの理由
Pythonで何か自動化してみたいけど、何から始めればいいかわからない。そんな人にこそ、URL自動起動スクリプトをおすすめします。
環境構築なしで始められる
Pythonの自動化というと、SeleniumやPlaywrightのセットアップで挫折した経験がある人もいるのではないでしょうか。ブラウザドライバーのバージョンが合わない、パスが通っていない……あるあるです。
webbrowserモジュールは標準ライブラリなので、Pythonさえインストールされていれば追加のセットアップは一切不要。「とりあえず動く」までの距離が圧倒的に短いのが強みです。
成果がすぐ目に見える
スクリプトを実行した瞬間、ブラウザがバッと開いて複数のタブが並びます。「おお、動いた!」という感動が即座に味わえます。
データ分析や機械学習の自動化だと、結果を確認するまでに時間がかかりますよね。URL自動起動は、成功と失敗が一目瞭然。プログラミング初心者のモチベーション維持にも最適です。
応用の幅が広い(スクレイピング・通知連携へ)
URL自動起動ができたら、次のステップとして色々な応用が見えてきます。
- スクレイピング:開くだけでなく、ページの情報を自動で取得する
- Slack通知:スクリプトの実行結果をSlackに通知する
- エラーハンドリング:サイトが開けなかったときに自動でリトライやアラートを出す
- ログ管理:いつどのサイトを開いたか記録する
私自身、URL自動起動をきっかけに、ポイントサイトの自動クリックやRSSフィード監視の自動化に手を広げていきました。小さな自動化が「次は何を自動化しようか」という発想につながるのが面白いところです。
まとめ
Pythonのwebbrowserモジュールを使えば、毎日開くサイトを30行程度のコードで完全に自動化できます。
- webbrowserモジュールは標準ライブラリなのでインストール不要。2行でブラウザが開く
- URLをJSONで管理すれば、サイトの追加・削除・ブラウザ指定がテキスト編集だけで完結する
- launchd・cron・タスクスケジューラで毎朝の定期実行を設定すれば、手作業はゼロになる
「毎日やっている作業」の中に、Pythonで自動化できるものは必ずあります。まずは身近な「URLを開く」から始めてみてください。一度味わうと、もう手動には戻れません。