【Python】クリックできるまでサイトをリロードし続ける方法(Selenium+disabled属性)

目次

はじめに

PythonでSeleniumを使ったスクレイピングを行っている際に、「ある時刻(例:16時)になったらクリックできるようになる」タイプのボタンに遭遇しました。
それまではクリックができず、プログラムが進まないという問題が発生したため、ボタンが有効になるまで自動でリロードし続ける方法を調べ、実装しました。

本記事では、その方法と注意点についてご紹介します。

状況の整理

対象のWebサイトでは、ボタンにdisabled属性が付いており、有効な状態(クリック可能)になるまで操作ができませんでした。
disabledはHTMLでよく使われる属性で、「その要素を無効にする(操作できないようにする)」という意味があります。

このdisabled属性の有無を利用すれば、ボタンが有効になったタイミングを検知することが可能です。

解決方法:disabled属性がなくなるまでリロードを繰り返す

以下のようなPythonコードで実現できます。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
import time

browser = webdriver.Chrome(ChromeDriverManager().install())

while True:
    try:
        # disabled属性のある要素を探す
        browser.find_element_by_class_name("disabled")
        browser.refresh()  # 見つかったらリロード
        time.sleep(1)      # サーバーへの負荷を考慮して待機
    except Exception:
        print("disabledが見つかりません。クリック可能な状態です。")
        break

# この位置から次の処理を記述します(例:クリックなど)

プログラムの説明

  • import文で必要なライブラリを読み込んでいます。
  • while True:でループを開始し、常にボタンの状態を監視します。
  • browser.find_element_by_class_name("disabled")で、無効状態のボタンを探します。
  • 見つかればページをリロードし、1秒の待機を入れてループします。
  • disabledが見つからなければ例外が発生し、exceptに処理が移ります。
  • breakでループを抜け、次の操作(クリックなど)に進みます。

注意点:複数のボタンがある場合は使用不可

この方法には制限があります。たとえば、ページ内に複数のボタンがあり、その中に「まだ無効なボタン(disabled)」と「すでに有効なボタン」が混在している場合、ひとつでもdisabledが存在すればリロードを繰り返してしまうため、うまく動作しません。

たとえば以下のようなケースでは不向きです。

  • Aボタン(有効):1月6日にクリック可能
  • Bボタン(無効):1月10日にクリック可能

この場合、Bボタンが常にdisabledのままであるため、Aボタンがクリック可能であってもプログラムが先に進めません。

現時点では、「ページ内に対象のボタンがひとつだけ存在する」場合に限って使える方法です。
より柔軟に対応する方法が見つかれば、あらためて記事にまとめたいと思います。

おわりに

Seleniumを使った自動化では、サイト側の仕様(ボタンの有効化タイミングや属性の状態)を正確に把握することが重要です。今回のようにdisabled属性の有無を監視することで、一定の条件が整うまで処理を保留することが可能となります。

本記事が同じような課題を抱えている方の参考になれば幸いです。
最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次