質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

受付中

【selenium】time.sleep以外で待機処理する方法

katahik
katahik

総合スコア74

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

1回答

0評価

0クリップ

456閲覧

投稿2021/11/30 14:22

編集2021/11/30 23:07

実現したいこと

Python 3.8.8

閲覧いただきありがとうございます。
seleniumを用いて、web操作の自動化を試みていますが、time.sleep以外で待機処理することができず、困っています。
下記コードのように、WebDriverWaitを用いて待機処理を試みたのですが、下記エラーになり、できませんでした。

time.sleepを使った方法だと、処理自体はできたのですが、time.sleepを使うと処理結果が不安定になってしまうので、コンテンツを基準にした待機を実装したいところです。

皆様のお知恵をお貸しいただければ、幸いです。

該当箇所
# time.sleepを使っていたら処理ができたのですが、WebDriverWaitを使うと下記エラーが表示 WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located) # time.sleep(20)
code全文
# ライブラリをインポート from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time import datetime # ドライバーを指定 from selenium.webdriver.support.select import Select driver = webdriver.Chrome('./chromedriver') # 対象のWebサイトのURL URL = 'http://localhost/login' # 暗黙的な待機 driver.implicitly_wait(10) # 最大の読み込み時間を設定 今回は最大30秒待機できるようにする wait = WebDriverWait(driver=driver, timeout=30) try: EXEC_TIME = datetime.datetime.now() MAIL_ADDRESS = 'hogehoge@gmail.com' PASSWORD = 'Password' print('実行日時 ' + str(EXEC_TIME)) ## ログイン driver.get(URL) login_action = webdriver.common.action_chains.ActionChains(driver) # メールアドレス入力 email_box = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[2]/form/div[1]/div/input') login_action.move_to_element_with_offset(email_box, 5, 5) login_action.click() login_action.send_keys(MAIL_ADDRESS) # パスワード入力 password_box = driver.find_element_by_xpath('//*[@id="input-password"]') login_action.move_to_element_with_offset(password_box, 5, 5) login_action.click() login_action.send_keys(PASSWORD) # ログインボタン押下 login_btn = driver.find_element_by_xpath('/html/body/div[1]/main/div/div[2]/form/div[3]/button') login_action.move_to_element_with_offset(login_btn, 5, 5) login_action.click() # 貯めていたキューを実行 login_action.perform() # 画面が表示されるまで待機 # wait.until(EC.presence_of_all_elements_located) WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located) # time.sleep(20) # サイドメニューを開くボタンを押下 side_menu_btn = driver.find_element_by_xpath('/html/body/div[1]/div[1]/label') if side_menu_btn.is_displayed(): print(side_menu_btn.is_displayed()) # => True side_menu_btn.click() else: print(side_menu_btn.is_displayed()) print("表示されてないのでクリックできない") print("正常終了します。") # エラーが発生した時はエラーメッセージを吐き出す。 except Exception as e: print(e) print("エラーが発生しました。")
error文
Message: element click intercepted: Element <label for="drawer-checkbox" class="drawer-btn">...</label> is not clickable at point (32, 104). Other element would receive the click: <div class="vld-background"></div> (Session info: chrome=96.0.4664.55)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

otn

2021/11/30 15:09

エラーメッセージとコードが対応していませんが、このエラーは、この後続でクリックした際に、待ちが足りなかったために発生したエラーだと確定していると言うことでしょうか?
katahik

2021/11/30 21:47 編集

@otn コメントありがとうございます。失礼しました、ご指摘の通り、後続のクリック時に、エラーが発生します。質問文を修正しました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。