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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

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

Q&A

解決済

1回答

7218閲覧

seleniumのWebDriverWaitで複数の条件を指定するには

ikapy

総合スコア1167

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

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

0グッド

1クリップ

投稿2018/03/19 10:47

前提・実現したいこと

python 3.5です。
selenium(バージョン3.7.0)で入力項目をセットしclick()を実行後、WebDriverWaitのtitle_containsで待つようにしていますが、入力によりタイトルが異なるサイトがあります(なおその異なるタイトルに重複する文字列はありません)。
このような場合のためにWebDriverWaitで複数の条件を指定する方法がありましたらご教授ください。
よろしくお願いします。

該当のソースコード

WebDriverWait(driver, 10).until(EC.title_contains("タイトル")) ここで"タイトル"を複数指定する方法はありますでしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

独自の待機条件を作成してWebDriverWait#untilに渡せばよいかと。

Python

1import random 2from selenium import webdriver 3from selenium.common.exceptions import TimeoutException 4from selenium.webdriver.support.ui import WebDriverWait 5 6 7def get_url() -> str: 8 URLS = ["https://www.google.co.jp/", "https://teratail.com/", "http://www.example.com/"] 9 return random.choice(URLS) 10 11 12def condition(driver) -> bool: 13 look_for = ['google', 'treratail', 'example'] 14 url = driver.current_url 15 if any(url.find(s) != -1 for s in look_for): 16 print("match:{}".format(url)) 17 return True 18 19 return False 20 21 22def main() -> None: 23 driver = webdriver.Chrome() 24 url = get_url() 25 print("req:{}".format(url)) 26 try: 27 driver.get(url) 28 try: 29 WebDriverWait(driver, timeout=10).until(condition) 30 print("done:{}".format(driver.current_url)) 31 except TimeoutException as ex: 32 print("#" * 80) 33 print(ex) 34 finally: 35 driver.quit() 36 37 38if __name__ == '__main__': 39 main() 40

■参考情報
5. Waits
expected-conditions-with-selenium-python

投稿2018/03/19 18:10

編集2018/03/19 22:51
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikapy

2018/03/20 08:03 編集

umyu様 ご回答ありがとうございました。 以下のようなコードにして対応できました。 def myCond(driver) -> bool:  titles = ["タイトル1", "タイトル2"]  title = driver.title  if any(title.find(s) != -1 for s in titles):   return True  return False ・・・ WebDriverWait(driver, 10).until(myCond)
umyu

2018/03/20 08:04

あ、ごめんなさい。タイトルを判定したいのでしたね。。申し訳ない。。 解決内容のフィードバックありがとうございました。 any(title.find(s) != -1 for s in titles)部分に関しては printが不要なら、 Return any(title.find(s) != -1 for s in titles)とする形にできるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問