web-dev-qa-db-ja.com

Selenium-要素が存在し、表示され、操作可能になるまで待ちます

クラスにanonemailを表示させるために返信ボタンをクリックするSeleniumスクリプト(python)があります。クラスanonemailが表示されるまでにかかる時間はさまざまです。そのため、要素が表示されるまでスリープを使用する必要があります。スリープを使う代わりに、クラスが現れるまで待ちたい。待機コマンドについて聞いたことがありますが、使用方法がわかりません。

これは私がこれまで持ってきたものです:

browser.find_element_by_css_selector(".reply-button").click()
sleep(5)
email=browser.find_element_by_css_selector(".anonemail").get_attribute("value")
2
Benjamin Arvola

ベストプラクティスに従って:

  • あなたのユースケースが任意の要素の存在を検証することである場合、誘導する必要がある WebDriverWait 設定 expected_conditions = as presence_of_element_located() これは、ページのDOMに要素が存在することを確認するための要件です。これは、要素が表示されることを必ずしも意味しません。したがって、有効なコード行は次のようになります。

    _WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
    _
  • ユースケースがである場合、任意の要素の属性を抽出する必要があります WebDriverWait 設定 expected_conditions = as visibility_of_element_located(locator) これは、要素がページのDOMに存在し、表示されていることを確認するための要件です。可視性とは、要素が表示されるだけでなく、高さと幅が0より大きいことを意味します。したがって、ユースケースでは、コード行は次のようになります。

    _email = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "element_css"))).get_attribute("value")
    _
  • ユースケースがclick()を呼び出す必要がある場合は、 WebDriverWait を設定する必要があります- expected_conditions as element_to_be_clickable() これは、要素がクリック可能になるように表示および有効化されていることを確認するための要件です。したがって、実際のユースケースでは、コード行は次のようになります。

    _WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".reply-button"))).click()
    _

参考文献

あなたはいくつかの詳細な議論を見つけることができます:

5
DebanjanB

待機を使用できます。このリンクで詳細を確認してください: Selenium watis

以下の例では、visibility_of_element_located関数を使用して、要素が表示されるまで10秒待機しています。

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.ID, "myDynamicElement"))
    )
finally:
    driver.quit()
0
daniboy000

replyボタンをクリックした後、.visibility_of_element_located怒鳴るように:

browser.find_element_by_css_selector(".reply-button").click()

#wait initialize, in seconds
wait = WebDriverWait(browser, 10)

email = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.anonemail'))).get_attribute("value")
print(email)

インポート後:

from Selenium.webdriver.common.by import By
from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.webdriver.support import expected_conditions as EC

Waits docs

0
frianH

implicitly_wait を使用できます

from Selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(15)
driver.get("http://url")
driver.find_element_by_id("id_of_element").click()

要素が読み込まれるまで待機します。

あなたの場合、実装は

browser.implicitly_wait(10)
browser.find_element_by_css_selector(".reply-button").click()
email=browser.find_element_by_css_selector(".anonemail").get_attribute("value")
0
Marceline