2016-10-12 12 views
5

मेरे पास एक पृष्ठ है जो AJAX के साथ गतिशील सामग्री लोड करता है और फिर निश्चित समय के बाद रीडायरेक्ट करता है (निश्चित नहीं)। मैं सेलेनियम वेबड्राइवर को पेज को रीडायरेक्ट करने के लिए इंतजार करने के लिए कैसे मजबूर कर सकता हूं, उसके तुरंत बाद एक अलग लिंक पर जा सकता हूं?पेज रीडायरेक्ट के लिए प्रतीक्षा करें सेलेनियम वेबड्राइवर (पायथन)

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

यदि आप अपेक्षित यूआरएल जानते हैं तो आप 'driver.current_url' का उपयोग कर सकते हैं 'जबकि' लूप। –

+1

आप यूट्यूब को वेटर के साथ बदलने की प्रतीक्षा कर सकते हैं। –

उत्तर

5

आप को बदलने के लिए यूआरएल के लिए एक कस्टम 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") 

अपेक्षित स्थिति मूल रूप से एक प्रतिदेय है - __call__() जादू के रूप में विधि आप wrap it into a class अधिलेखित कर सकते हैं में निर्मित की स्थिति लागू कर रहे हैं।

+0

मुझे यकीन नहीं है कि दूसरा रीडायरेक्ट यूआरएल कहां रखा जाए। क्या आप मुझे एक उदाहरण दे सकते हैं कि इसे प्रदान की गई शर्तों के साथ कक्षा में कैसे लपेटें? इस उम्मीद की स्थिति में – 7O07Y7

+0

@ 7O07Y7 हम वर्तमान यूआरएल को बदलने की प्रतीक्षा कर रहे हैं। यदि आप इसे एक विशिष्ट यूआरएल चालू होने की प्रतीक्षा करने के लिए बदलना चाहते हैं, तो आप 'lambda ड्राइवर: driver.current_url == "विशिष्ट url" 'का उपयोग कर सकते हैं। – alecxe

2

अद्वितीय (नए पृष्ठ के लिए) तत्व के लिए "प्रतीक्षा करें" के लिए यह एक अच्छा अभ्यास है।

आप मॉड्यूल 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" 
0

कई 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) के साथ नए पेज शीर्षक की प्रतीक्षा करें:

    के साथ सटीक URL पर नेविगेट के लिए

    wait.until(EC.url_changes('https://current_page.com')) 
    
  2. प्रतीक्षा: वर्तमान URL के लिए

  3. प्रतीक्षा url_changes(exact_url) साथ किसी अन्य यूआरएल के लिए परिवर्तित किया जाना

    wait.until(EC.url_to_be('https://new_page.com')) 
    
इसके अलावा

url_contains(partial_url) का उपयोग वाई के लिए किया जा सकता है यूआरएल के लिए टी जिसमें निर्दिष्ट सबस्ट्रिंग या url_matches(pattern) है - पारित रेगेक्स पैटर्न या title_contains(substring) द्वारा मिलान किए गए यूआरएल की प्रतीक्षा करने के लिए - निर्दिष्ट सबस्ट्रिंग

संबंधित मुद्दे