web-dev-qa-db-ja.com

Python Selenium Webdriver-ループを除いてみてください

フレームごとにロードする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()を使用するなど、さまざまな組み合わせを試しました。

ありがとう

12
user3294195

特定の質問に対する答えは次のとおりです。

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

26
neoascetic

別の方法があります。

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呼び出し内で、ドライバー変数と待機する秒数を入力します。

3
Charls