python selenium: click() コマンドの後にページが読み込まれるまで待機しません 質問する

python selenium: click() コマンドの後にページが読み込まれるまで待機しません 質問する

ページが読み込まれるまで待つ方法を誰か知っていますか? Web で見つけたあらゆる方法を試しましたが、まったく機能しません。

click() コマンドをトリガーした後、待機する必要があります。Web サーバー上には、次のようなチェックを騙す内部スクリプトがあります (必要なモジュールをインポートするコードは除外し、標準の命名規則を使用します)。

WebDriverWait(browser, 10).until(lambda d: d.find_element_by_id(the_id))

または

browser.implicitly_wait(10) 

または

elem2=wait.until(EC.presence_of_element_located((By.ID,the_id)))

上記のチェックはすべて機能せず、ページがまだロード中であってもTrueを返します。これにより、click()コマンドの後にページが完全にロードされていないため、読んでいるテキストが不完全になります。Pythonでは、コマンドクリックして待機利用できません (ただし、他のテストも失敗するため、おそらく問題は解決しません)。理想的には、Web ページ全体が読み込まれるまで待機するコマンド (ページの特定の要素に関係なく) があるはずです。

ループに手動で time.sleep(5) を挿入することで問題を解決できましたが、プロセス全体が遅くなる可能性があるため、これは最適ではありません。可能であれば、厳密に必要な時間だけ待機する方がよいでしょう。

THX

ベストアンサー1

基本的に、ページが JavaScript によって生成されている場合、読み込みがいつ「完了」したかを知る方法はありません。

ただし、通常はページ要素を取得し、例外をキャッチして、タイムアウトに達するまで試行を続けます。要素が単に存在するだけでなく、表示されているかどうかも確認する場合があります。

ページの読み込みが「完了」したかどうかをテストするために、可視性を使用できる DOM 要素がいくつかあるはずです。通常、テスト ケースにはwait_for_element_visibility、、および関数があります。wait_for_element_presence

def wait_for_visibility(self, selector, timeout_seconds=10):
    retries = timeout_seconds
    while retries:
        try:
            element = self.get_via_css(selector)
            if element.is_displayed():
                return element
        except (exceptions.NoSuchElementException,
                exceptions.StaleElementReferenceException):
            if retries <= 0:
                raise
            else:
                pass

        retries = retries - 1
        time.sleep(pause_interval)
    raise exceptions.ElementNotVisibleException(
        "Element %s not visible despite waiting for %s seconds" % (
            selector, timeout_seconds)
    )

get_via_cssは私が作成した関数の 1 つですが、何をしているのかは明らかだと思います。

おすすめ記事