クラスに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")
ベストプラクティスに従って:
あなたのユースケースが任意の要素の存在を検証することである場合、誘導する必要がある 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()
_
あなたはいくつかの詳細な議論を見つけることができます:
待機を使用できます。このリンクで詳細を確認してください: 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()
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
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")