Python

【Selenium解説①】Pythonでブラウザ自動操作ができるSeleniumについて簡単に解説

2024年5月13日

少し身の上話となるが、2024年4月に自動車学校に入校した。

入校説明時に「教習予約をスムーズに行うには22,000円の課金が必要」ということが判明した。課金しない場合、専用の予約サイトでキャンセル待ちをし、都度予約することが必要とのこと。都内1人暮らし(26歳男性)には「22,000円の課金」はかなり大きい。その場では課金することなく、キャンセル待ちをするという形で入校した。

だが、常に専用の予約サイトに張り付いているわけにはいかない。そこで「自動化すれば良いじゃないか」という発想に至り、ブラウザの自動操作ができるSeleniumに触れることになった。

導入が少し長くなったが、いくつかの章に分けてSeleniumについて解説する。Seleniumに触れたことがなかった(Pythonは少しわかる)自分でも、入校した当日中に思い通りのシステムを構築できたため、初学者の方も参考にしてほしい。

「サリー」です。AWSパートナー企業でエンジニアとして働いています。
お問い合わせ自己紹介

【簡単に解説】Seleniumとは何か?

Seleniumは、ブラウザを自動操作するためのフレームワーク。

主にWebアプリケーションのテスト自動化に利用されるが、スクレイピングや自動データ入力など、さまざまなシナリオで活用することができる。

Seleniumの基本機能

  • 自動ブラウジング:プログラムを通じてブラウザを操作し、ウェブサイトにアクセス可能
  • 要素の操作:テキスト入力、ボタンクリック、リンク操作など、ユーザーのアクションをコードで操作可能。

環境

Amazon Linux2023

※Lambdaレイヤを作成してみたが、うまくいかなかった。。

Seleniumの設定

Seleniumを使用するためには、Selenium WebDriverとブラウザドライバ(この例ではChromeDriver)が必要。以下の手順に従ってインストール。

  1. Pythonとpipのインストール $ sudo yum install python3-pip
  2. Seleniumライブラリのインストール $ pip3 install selenium
  3. ChromeDriverのインストール $ pip3 install chromedriver-binary

Seleniumの基本的な使用例

次のPythonスクリプトは、Googleのホームページを開き、そのタイトルを出力する基本的な例。

Seleniumスクリプトの実行

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import chromedriver_binary  # chromedriver_binaryをパスに追加

def main():
    # Chromeオプションの設定
    options = Options()
    options.add_argument("--no-sandbox")  # サンドボックスモードの無効化
    options.add_argument("--headless")  # GUIがない環境での実行
    options.add_argument("--disable-dev-shm-usage")  # /dev/shmパーティションの使用を避ける
    options.add_argument("--disable-gpu")  # GPUハードウェアアクセラレーションを無効化
    options.add_argument("start-maximized")  # 最大ウィンドウサイズで開始
    options.add_argument("disable-infobars")  # Chromeの情報バーを非表示に
    options.add_argument("--disable-extensions")  # 全ての拡張機能を無効化

    # Chrome WebDriverサービスを設定
    service = Service(executable_path=chromedriver_binary.chromedriver_filename)

    # ChromeのWebDriverオブジェクトを作成
    driver = webdriver.Chrome(service=service, options=options)

    try:
        # Googleのホームページにアクセス
        driver.get("https://www.google.com")

        # ページのタイトルを出力
        print("Title: " + driver.title)

    finally:
        # ブラウザを閉じる
        driver.quit()

if __name__ == "__main__":
    main()

以下でも実行できるかも

from selenium import webdriver
import chromedriver_binary  # Adds chromedriver binary to path

driver = webdriver.Chrome()  # ChromeのWebDriverオブジェクトを作成
driver.get('https://www.google.com')  # Googleのホームページにアクセス
print("Title: " + driver.title)  # ページのタイトルを出力
driver.quit()  # ブラウザを閉じる

実行結果

上記のprintで出力したtitleが出力される

$ python3 test.py 
Title: Google

実行時の問題と解決策

Seleniumを使用する際には、特定の問題が発生することがある。たとえば、ChromeDriverのバージョンがブラウザのバージョンと一致しないとエラーが生じる。これを解決するために、適切なバージョンのChromeDriverをインストールする必要がある。

$ pip3 uninstall chromedriver-binary
$ pip3 install chromedriver-binary==123.0.6312.122

さらに、Linux環境ではChrome自体がインストールされていないことが原因でエラーが発生することがある。以下のコマンドでChromeをインストールする。

$ sudo yum install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

コードの紹介

サイトの表示

次のとおりgetメソッドを使用することでサイトを開くことができる。

driver.get("https://www.google.co.jp")

その他のコードについては次回以降で説明する。

まとめ

Seleniumは、Webブラウザの自動操作を可能にするツール。使いようによってはとても便利になる。実際自分は自動車学校の予約サイトへのアクセス~予約可能通知までを自動化でき、2万円以上の節約につながった。

また業務でPythonを書くことはあったが、本当に自分が実装したいものがあると調査意欲、実装スピードが上がるのだと感じた。やはり自分が実装したいと思うシステムを作成すると夢中になれるしより成長できると実感した。

次の記事

-Python
-,