ページが読み込まれるまで待つ方法を誰か知っていますか? 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 つですが、何をしているのかは明らかだと思います。