等待页面重定向Selenium WebDriver(Python)

时间:2016-10-12 15:43:00

标签: python selenium selenium-webdriver webdriver

我有一个页面用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") 

3 个答案:

答案 0 :(得分:8)

您可以为要更改的网址创建自定义Expected Condition to wait

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")

预期条件基本上是可调用的 - 您可以wrap it into a class覆盖__call__()魔术方法,因为内置条件已实现。

答案 1 :(得分:4)

等待"这是一个很好的做法。用于显示唯一(用于新页面)元素。

您可以使用模块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"

答案 2 :(得分:2)

可以与ExpectedConditions一起使用多个ExplicitWait来处理页面重定向:

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_changes(exact_url)的任何其他网址:

    wait.until(EC.url_changes('https://current_page.com'))
    
  3. 等待使用url_to_be(exact_url)导航到确切的网址:

    wait.until(EC.url_to_be('https://new_page.com'))
    
  4. 另外

    url_contains(partial_url)可用于等待包含指定子字符串或url_matches(pattern)的URL - 等待通过正则表达式模式匹配的URL或title_contains(substring) - 等待包含指定的新标题子