はじめに
こんにちは、エンジニアのkeitaMaxです。
PythonとSeleniumを使用してスクレイピングをしていたのですが、数秒待ってからかつ、スクロールをしないと要素がクリックできない、という状況があり困ったことがあったので記事にしました。
内容
以下のようにElementをとってきて、そのElementのところにスクロールをしてからSleepを10秒させた後にクリックする処理を作成しました。
# elementをとる
element = wait.until(EC.presence_of_element_located((By.XPATH, "(//div[contains(@class, 'button')])[3]//a")))
# スクロールする
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth", block: "center"});', element)
# 10秒待つ
sleep(10)
# クリックする
element.click()
しかし、この場合だとelementが古いままでクリックした時に新しい情報が取って来れなかったので以下のようにSleepした後に再度Elementを取得するように修正しました。
# elementをとる
element = wait.until(EC.presence_of_element_located((By.XPATH, "(//div[contains(@class, 'button')])//a")))
# スクロールする
driver.execute_script('arguments[0].scrollIntoView({behavior: "smooth", block: "center"});', element)
# 10秒待つ
sleep(10)
# 再度elementをとる ← 追加
element = wait.until(EC.presence_of_element_located((By.XPATH, "(//div[contains(@class, 'button')])//a")))
# クリックする
element.click()
これで無事今回の問題を解決することができました。
おわりに
この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。
最後まで読んでいただきありがとうございました!
参考