クリックできるようになるまで、サイトをリロードし続けるようにする【python】

目次

経緯

pythonでスクレイピングをやっていて、

例えば、「16時になったら、クリックできるようになっていて、16時まではそこをクリックできない」というサイトに出くわした。

なので、「クリックできるようになるまでループする」という方法を、

今回勉強しました。

“disabled”というのが、関係しているらしい

サイトのクリックしたい所の要素を調べると、どうやら要素が”disabled”ということになっていて、クリックできないようになっているようです。

なので、”disabled”をうまく使うとできそうです。

ちなみに”disabled”というのは「無効」という意味です。

プログラムを書きます。クリックしたいサイトに入っているという想定で書いてます。

from webdriver_manager.chrome import ChromeDriverManager
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select

import time

while True: #要素を押せるようになるまでループしてる。 
            try:
                browser.find_element_by_class_name("disabled")
                browser.refresh()
                time.sleep(1)
            except Exception:
                print("disabledはありません。")
        break

プログラムを説明します。空白の行はカウントしてません。

1~5行目、importしてます。

6行目、ループをはじめます。

7行目、tryを使って処理を分岐させてます。

8行目、”disabled”という要素を探してます。

9行目、”disabled”があったので、リロードしています。

10行目、1秒待機しています。ここがないと、間髪いれずリロードし続けることになります。私は「1秒」しましたが、自身にあった値でいいと思います。

11行目、except の処理です。

12行目、print文です。ここでクリックを押せる状態になっているので、これ以下に次の処理を書くといいと思います。

13行目、breakで、プログラムを抜け出しています。

こんな感じでできました。

私は何回も試したわけではないので、これで完璧とは自信を持って言えませんが、

参考になれば、幸いです。

複数入力できるサイトがある場合はできない

プログラムをいろいろ試していたら、問題が出てきました。

例えば、今日が1月7日として、

「1月6日にクリックできようになる」のと「1月10日にクリックできるようになる」というのが複数あった場合、

上に書いたプログラムだと「1月10日にクリックできるようになる」要素は”disabled”なので、

ずっとリロードし続けることに気づきました。

なので、上に書いたプログラムは「クリックできる所と、クリックできない所が入り乱れているサイト」では使えません。

もし、こういったサイトもできるようになったら、また、ブログを書きたいと思います。

よろしくお願いします。

ここまで読んでいただきありがとうございました。

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

この記事を書いた人

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

目次