0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでスクレイピングをしていた時に対象の要素にスクロールして要素を取り直す

Posted at

はじめに

こんにちは、エンジニアの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()

これで無事今回の問題を解決することができました。

おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました!

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?