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

2024-04-25 13:17:52 发布

您现在位置: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") 

Tags: fromimport内容supportdriverselenium时间动态
3条回答

有几个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. 使用^{}等待新页面标题:

    wait.until(EC.title_is('New page Title'))
    
  2. 等待当前URL更改为任何其他具有^{}的URL:

    wait.until(EC.url_changes('https://current_page.com'))
    
  3. 等待使用^{}导航到准确的URL:

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

同时

^{}可用于等待包含指定子字符串的URL或^{}-等待由传递的regex模式匹配的URL或^{}-等待包含指定子字符串的新标题

您可以为要更改的URL创建自定义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__()magic方法。

“等待”unique(新页面)元素出现是一个很好的做法。

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

相关问题 更多 >