今回の記事はPythonのwebbrowserモジュールを使って指定のURLを複数同時に開く方法を解説します。ですがその前にwebbrowserモジュールの挙動を理解するために最初に簡単な例としてヤフーニュースのサイトをたくさんのタブで開くというのをやってみたいと思います。そのあとに指定のURLを複数同時に開く方法を解説します。
webbrowserを使ってChromeのタブを何個開けるかやってみる
Pythonのwebbrowserを使って、yahooニュースのサイトを一気に50個ひらいたらどうなるのか検証してみました。
Pythonのwebbrowserモジュールってなに?
pythonのwebbrowseropenは引数(パラメーターに)ウェブサイトのURLを指定することによって、プログラムが自動的にウェブサイトを開いてくれるようになります。今回やったヤフーニュースを50個ひらく作業は手作業でやると少し時間がかかると思いますが、プログラムだとはやいです。
今回検証したパソコンのスペック
ヤフーニュースのサイトを50タブ開くだけなのでパソコンスペックは関係ないかもしれませんが一応のせておきます。
- CPU:Ryzen 1700X
- メモリ:16GB
結果から話しますと、とくに問題はありませんでした。しかし、後半あたりは少しきつい感じがしました。なんでこれをやろうかと思ったかは自分でもわかりませんが、pythonでwebスクレイピングをやっていると一体どこまでできるのだろうと先が見えない感じになっていました。ただ同じサイトをタブで開くだけなのでどうでもいいとは思いますが、コードを載せておきます。
import webbrowser for i in range(50): webbrowser.open('https://news.yahoo.co.jp/')
webbrowser.open()を50回繰り返しているだけの構文です。一説によりますとchromeはタブが開ける上限が決まっているらしいです。50個以上タブチャレンジはしようと思いませんでした。さすがに50個より先は現実的ではない感じがしました。
webbrowserモジュールを使って指定のURLを複数同時に開く方法
Pythonのwebbrowser
モジュールでは、指定のURLを同時に複数開くことは直接サポートされていませんが、マルチスレッドを使用してそれを実現することができます。マルチスレッドを使うことで、複数のURLを非同期に処理し、同時にブラウザで開くことができます。
以下は、マルチスレッドを使用して指定のURLを同時に複数開くサンプルコードです。
import webbrowser
import threading
def open_url(url):
webbrowser.open(url)
urls = [
'https://www.example.com',
'https://www.google.com',
'https://www.yahoo.co.jp',
# 追加のURLをここに記述
]
threads = []
for url in urls:
thread = threading.Thread(target=open_url, args=(url,))
thread.start()
threads.append(thread)
# 全てのスレッドが終了するのを待つ
for thread in threads:
thread.join()
上記のコードでは、urls
リストに複数のURLを追加し、各URLを別々のスレッドで非同期に開くことができます。threading.Thread
クラスを使用して新しいスレッドを作成し、webbrowser.open
関数をスレッドで実行することで、URLを同時に複数開くことができます。
雑感
webbrowserはあまり使う場面はないかもしれまんが、たとえばグーグルの検索結果のリンクを一気に開きたい場合などにwebbrowserモジュールが活躍します。それ以外はいつ役に立つのかわかりませんがこのモジュールを活かせるかは開発者次第のような気もします。
コメント