経緯
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”なので、
ずっとリロードし続けることに気づきました。
なので、上に書いたプログラムは「クリックできる所と、クリックできない所が入り乱れているサイト」では使えません。
もし、こういったサイトもできるようになったら、また、ブログを書きたいと思います。
よろしくお願いします。
ここまで読んでいただきありがとうございました。