2016-10-12 11 views
5

ajax로 동적 컨텐트를로드 한 다음 특정 시간 (고정되지 않은) 후에 리디렉션하는 페이지가 있습니다. Selenium Webdriver가 리디렉션 된 후 다른 링크로 바로 연결될 때까지 기다리는 것을 어떻게 강제 할 수 있습니까?페이지 리디렉션 대기 Selenium WebDriver (Python)

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

예상 URL을 알고 있으면 a에서 'driver.current_url'을 사용할 수 있습니다. while 루프. –

+1

웨이터와 URL이 바뀔 때까지 기다릴 수 있습니다. –

답변

5

당신은 변경할 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__() 마법 방법 내장 조건 구현됩니다.

+0

두 번째 리디렉션 URL을 어디에 둘 것인지 확실하지 않습니다. 제공된 조건에 따라 수업에서 랩하는 방법에 대한 예를 들어 주시겠습니까? – 7O07Y7

+0

@ 7O07Y7이 예상 된 조건에서 우리는 현재 URL이 변경되기를 기다리고 있습니다. 특정 URL이 최신 상태가 될 때까지 기다리도록 변경하려면'lambda driver : driver.current_url == "특정 URL"을 사용할 수 있습니다. – alecxe

2

고유 한 (새 페이지의) 요소가 나타날 때까지 "대기"하는 것이 좋습니다.

모듈 expected_conditions을 사용할 수 있습니다. 예를 들어, 로그인에 사용자 로고

기다릴 수 :

페이지 재 처리 ExplicitWait과 함께 사용할 수있는 몇 가지 ExpectedConditions 있습니다
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" 
0

:

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)으로 새 페이지 제목을 기다립니다.

    url_to_be(exact_url)와 정확한 URL로 이동을 위해

    wait.until(EC.url_changes('https://current_page.com')) 
    
  2. 기다립니다 : 현재 URL에 대한

  3. 기다립니다 url_changes(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) - 지정된 하위 문자열을 포함하는 새 제목을 기다리는 중

관련 문제