フレームごとにロードするWebページのプロセスを自動化しようとしています。要素が存在することが確認された後にのみ実行されるtry-except
ループを設定しようとしています。これは私が設定したコードです:
from Selenium.common.exceptions import NoSuchElementException
while True:
try:
link = driver.find_element_by_xpath(linkAddress)
except NoSuchElementException:
time.sleep(2)
上記のコードは機能しませんが、次の素朴なアプローチは機能します。
time.sleep(2)
link = driver.find_element_by_xpath(linkAddress)
上記のtry-exceptループに欠けているものはありますか? try
の後ではなくexcept
の前にtime.sleep()を使用するなど、さまざまな組み合わせを試しました。
ありがとう
特定の質問に対する答えは次のとおりです。
from Selenium.common.exceptions import NoSuchElementException
link = None
while not link:
try:
link = driver.find_element_by_xpath(linkAddress)
except NoSuchElementException:
time.sleep(2)
ただし、要素がページに表示されるまで待機するより良い方法があります。 waits
別の方法があります。
from Selenium.common.exceptions import TimeoutException
from Selenium.webdriver.support import expected_conditions as EC
from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.webdriver.common.by import By
try:
element = WebDriverWait(driver, 2).until(
EC.presence_of_element_located((By.XPATH, linkAddress))
)
except TimeoutException as ex:
print ex.message
WebDriverWait呼び出し内で、ドライバー変数と待機する秒数を入力します。