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

7O0*_*7Y7 5 python selenium webdriver selenium-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") 
Run Code Online (Sandbox Code Playgroud)

And*_*son 13

有几个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)
Run Code Online (Sandbox Code Playgroud)
  1. 等待新的页面标题title_is(title_name)

    wait.until(EC.title_is('New page Title'))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 等待当前 URL 更改为任何其他 URL url_changes(exact_url)

    wait.until(EC.url_changes('https://current_page.com'))
    
    Run Code Online (Sandbox Code Playgroud)
  3. 等待导航到确切的 URL url_to_be(exact_url)

    wait.until(EC.url_to_be('https://new_page.com'))
    
    Run Code Online (Sandbox Code Playgroud)

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


ale*_*cxe 9

您可以创建自定义的预期条件以等待 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")
Run Code Online (Sandbox Code Playgroud)

预期条件基本上是可调用的 - 您可以将其包装到一个类中,__call__()在实现内置条件时覆盖魔术方法.

  • @7O07Y7 在这种预期情况下,我们只是等待当前 url 更改。如果你想将其更改为等待特定的 url 为当前,可以使用 `lambda driver: driver.current_url == "specified url"`.. (2认同)

Max*_*x V 5

最好“等待”出现唯一的(对于新页面)元素。

您可以使用模块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"
Run Code Online (Sandbox Code Playgroud)