python

しょっちゅう忘れることを書いておく。

66

1689 views

ボタンがクリックできないときの対処法:expected_conditions.element_to_be_clickable

Seleniumでウェブページの要素を操作する際、要素が画面上に表示されていても、クリックができない場合があります。これは、要素がまだ完全にロードされていなかったり、非アクティブな状態である場合に発生します。このような問題に対処するために、expected_conditions.element_to_be_clickableを使って、要素がクリック可能になるまで待機することができます。

サンプルコード

  1. import os
  2. from selenium import webdriver
  3. from selenium.webdriver.common.alert import Alert
  4. from selenium.webdriver.support.ui import Select
  5. from selenium.webdriver.support.ui import WebDriverWait
  6. from selenium.webdriver.support import expected_conditions
  7. from selenium.webdriver.common.by import By
  8. def get_xpath(driver, path):
  9. # find_element_by_xpathと毎回書くのが面倒なので関数作成
  10. return driver.find_element_by_xpath(path)
  11. if __name__ == '__main__':
  12. options = webdriver.ChromeOptions()
  13. #options.add_argument() # 必要に応じてオプションを追加
  14. driver = webdriver.Chrome(os.path.join(os.getcwd(), "chromedriver.exe"), options=options)
  15. # 指定されたURLにアクセス
  16. driver.get('https://www.osumoi-stdio.com/')
  17. # WebDriverWaitを使用して、要素が表示されるまで最大10秒待機
  18. wait = WebDriverWait(driver, 10)
  19. # キーワード入力
  20. get_xpath(driver, '//*[@id="id_key_word"]').send_keys('暗号資産')
  21. # ボタンがクリックできるようになるまで待機
  22. wait.until(expected_conditions.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div[1]/div[1]/div/form/p[2]/button')))
  23. # ボタンをクリック
  24. get_xpath(driver, '/html/body/div[2]/div[1]/div[1]/div/form/p[2]/button').click()

コードの解説

  1. webdriver.ChromeOptions()の設定

    • webdriver.ChromeOptions()を使って、Chromeブラウザのオプションを設定します。必要に応じて追加のオプション(ヘッドレスモードなど)をoptions.add_argument()で指定できます。
  2. ブラウザの起動

    • webdriver.Chrome(os.path.join(os.getcwd(), "chromedriver.exe"), options=options)で、Chromeドライバーを使用してブラウザを起動します。os.path.join(os.getcwd(), "chromedriver.exe")は、実行ディレクトリにあるchromedriver.exeを指定しています。
  3. Webページへのアクセス

    • driver.get('https://www.osumoi-stdio.com/')で、指定されたURLにアクセスします。
  4. 要素が表示されるまで待機

    • WebDriverWait(driver, 10)で最大10秒間、指定した条件が満たされるのを待ちます。
    • expected_conditions.element_to_be_clickableを使って、要素がクリック可能になるまで待機します。(By.XPATH, 'xpath')の形式で要素を指定しています。
    • これにより、要素が非アクティブであったりロードが完了していない場合でも、クリックできる状態になるまで待つことができます。
  5. 要素操作

    • get_xpath(driver, 'xpath').send_keys('暗号資産')で、検索キーワードなどの入力を行います。
    • get_xpath(driver, 'xpath').click()で、クリック操作を行います。

注意点

  • expected_conditions.element_to_be_clickableは、要素がdisplay状態で、かつenabledな状態になったことを確認しますが、それでもうまくいかない場合はJavaScriptを使って直接クリックするなどの方法を検討する必要があります。
  • chromedriverがパスにない場合、実行ファイルのパスを正しく指定するようにしてください。
  • 必要に応じて、ブラウザのオプション(ヘッドレスモードなど)を追加して設定をカスタマイズできます。

Page 12 of 69.

前のページ 次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626