web-dev-qa-db-ja.com

ページリダイレクトを待つSelenium WebDriver(Python)

私はajaxで動的コンテンツをロードし、一定の時間(固定ではない)後にリダイレクトするページを持っています。 Selenium Webdriverにページのリダイレクトを待機させ、直後に別のリンクに移動させるにはどうすればよいですか?

import time
from Selenium import webdriver
from Selenium.webdriver.common.keys import Keys
from Selenium.webdriver.chrome.options import Options
from Selenium.webdriver.support import expected_conditions as EC
from Selenium.common.exceptions import TimeoutException
from Selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome();
driver.get("http://www.website.com/wait.php") 
7
7O07Y7

URLを変更するためのカスタムの 待機する期待される条件 を作成できます。

_from Selenium.webdriver.common.by import By
from Selenium.webdriver.support.ui import WebDriverWait

wait = WebDriverWait(driver, 10)
wait.until(lambda driver: driver.current_url != "http://www.website.com/wait.php")
_

期待される条件は基本的にcallableです クラスにそれをラップする__call__()マジックを上書きする組み込み条件として実装されているメソッド。

11
alecxe

ユニークな(新しいページの)要素が表示されるまで「待つ」ことをお勧めします。

モジュール expected_conditions を使用できます。

たとえば、ログイン時にユーザーのロゴを待つことができます。

from Selenium import webdriver
from Selenium.common.exceptions import TimeoutException
from Selenium.webdriver.support.ui import WebDriverWait
from Selenium.webdriver.support import expected_conditions as EC
from Selenium.webdriver.common.by import By

driver = webdriver.Firefox()
driver.get('http://yourapp.url')

timeout = 5

    try:
        logo_present = EC.presence_of_element_located((By.ID, 'logo_id'))
        WebDriverWait(driver, timeout).until(logo_present)
    except TimeoutException:
        print "Timed out waiting for page to load"
5
Max V

ExplicitWait とともに使用してページのリダイレクトを処理できるいくつかの ExpectedConditions があります。

_from Selenium.webdriver.support import expected_conditions as EC
from Selenium import webdriver
from Selenium.webdriver.support.ui import WebDriverWait

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
_
  1. title_is(title_name) で新しいページのタイトルを待ちます:

    _wait.until(EC.title_is('New page Title'))
    _
  2. 現在のURLが url_changes(exact_url) で他のURLに変更されるのを待ちます:

    _wait.until(EC.url_changes('https://current_page.com'))
    _
  3. url_to_be(exact_url) で正確なURLに移動するのを待ちます:

    _wait.until(EC.url_to_be('https://new_page.com'))
    _

また

url_contains(partial_url) は、指定された部分文字列を含むURLを待機するために使用できます url_matches(pattern) -渡された正規表現パターンに一致するURLを待機するために使用できますまたは title_contains(substring) -指定された部分文字列を含む新しいタイトルを待つ

5
Andersson