bugfix> python > 投稿

Python Seleniumによる自動化中に、処理に基づいてテキストボックスのTotal Amountが入力されるシナリオに遭遇しました。テキストボックスが表示されるまでに時間がかかります。以下のコードを使用してデータをフェッチしますが、取得するデータは ""(空の値)です。スリープを使用すると、合計金額が正しく取得されます。誰かが要素の属性値の変更を明示的に待つ方法を教えてもらえますか。

driver.find_element_by_css_selector('input#TotalAmount').get_attribute("value")

回答 2 件
  • あなたは time.sleep を使用して正しい軌道に乗っていると思います  値が入力されるのを待ちますが、 while True を使用して値を改善できると思います  値が返されるまで試行を続けるブロック。

    以下を考慮してください。

    from selenium.common.exceptions import WebDriverException
    import time
    MAX_TIME = 5  # This is the maximum time that the loop executes for
    start_time = time.time()
    while True:
        # Attempt to select the element from the browser
        val = driver.find_element_by_css_selector('input#TotalAmount').get_attribute("value")
        # If an empty string is not returned, break out
        if val != '':
            break
        # If the maximum execution time has been exceeded, raise a WebDriverException
        elif time.time() - start_time > MAX_TIME:
            raise WebDriverException
        # Otherwise sleep for 0.5s and retry
        else:
            time.sleep(0.5)
    
    

    この例では、whileブロックは '' 以外の値になるまで実行を続けます  が返されるか、実行時間が5秒を超えると WebDriverException が発生します

  • どのコードを使用するかについての具体的な詳細はありませんが、解決策は、Selenium Waitを使用して、探している状態になるまで待つことです。

あなたの答え