Μίλησε για μερικούς τύπους αναμονής στο Selenium.
sobes.tech AI
Απάντηση από AI
Στο Selenium Webdriver, χρησιμοποιούνται διάφορα είδη αναμονής για να συγχρονίσουν τις ενέργειες του σεναρίου με τη φόρτωση της ιστοσελίδας.
-
Αόριστη Αναμονή (Implicit Wait): Ορίζει τον μέγιστο χρόνο που θα προσπαθήσει το Selenium να βρει ένα στοιχείο στη σελίδα προτού ρίξει την εξαίρεση
NoSuchElementException. Εφαρμόζεται παγκοσμίως σε όλες τις λειτουργίες αναζήτησης στοιχείων μετά την ρύθμισή του.from selenium import webdriver # Δημιουργία στιγμιότυπου οδηγού driver = webdriver.Chrome() # Ρύθμιση αόριστης αναμονής (10 δευτερόλεπτα) driver.implicitly_wait(10) # Οι επόμενες λειτουργίες αναζήτησης στοιχείων θα χρησιμοποιούν αυτήν την αναμονή # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Κλείσιμο οδηγού # driver.quit() -
Επεξηγηματική Αναμονή (Explicit Wait): Ορίζει τον μέγιστο χρόνο για την εκτέλεση μιας συγκεκριμένης συνθήκης προτού ρίξει την εξαίρεση
TimeoutException. Εφαρμόζεται σε ένα συγκεκριμένο στοιχείο ή συνθήκη. Για χρήση, απαιτείται η κλάσηWebDriverWaitκαι μία από τις προκαθορισμένες ή προσαρμοσμένες "αναμενόμενες συνθήκες" (expected conditions).from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # Δημιουργία στιγμιότυπου οδηγού (δεν χρειάζεται αόριστη αναμονή αν χρησιμοποιείται επεξηγηματική) driver = webdriver.Chrome() # driver.get("http://example.com") # Ρύθμιση επεξηγηματικής αναμονής (10 δευτερόλεπτα) για την παρουσία του στοιχείου try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Ενέργειες με το στοιχείο # element.click() except: # Επεξεργασία εξαίρεσης αν το στοιχείο δεν βρεθεί σε 10 δευτερόλεπτα print("Το στοιχείο δεν βρέθηκε σε 10 δευτερόλεπτα") # Ρύθμιση επεξηγηματικής αναμονής για το αν το στοιχείο είναι κλικαμπλ try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Το στοιχείο δεν έγινε κλικαμπλ σε 15 δευτερόλεπτα") # Κλείσιμο οδηγού # driver.quit() -
Ευέλικτη Αναμονή (Fluent Wait): Παρόμοια με την επεξηγηματική, επιτρέπει τον ορισμό μέγιστου χρόνου αναμονής και συνθήκης. Επιπλέον, επιτρέπει τον καθορισμό διαστήματος (polling interval) για τον έλεγχο της συνθήκης και λίστα εξαιρέσεων που πρέπει να αγνοούνται κατά την αναμονή.
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import FluentWait from selenium.common.exceptions import NoSuchElementException # Δημιουργία στιγμιότυπου οδηγού driver = webdriver.Chrome() # driver.get("http://example.com") # Ορισμός ευέλικτης αναμονής wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Ενέργειες με το στοιχείο # element.click() except: print("Το στοιχείο δεν βρέθηκε με ευέλικτη αναμονή") # Κλείσιμο οδηγού # driver.quit()
Σύγκριση:
| Τύπος αναμονής | Εφαρμογή | Συνθήκη | Ευελιξία | Χρήση |
|---|---|---|---|---|
| Αόριστη | Παγκόσμια | Αναζήτηση στοιχείου | Χαμηλή (μόνο χρόνος) | Απλή ρύθμιση για όλα τα στοιχεία |
| Επεξηγηματική | Συγκεκριμένη | Ορισμένη συνθήκη | Υψηλή (χρόνος, συνθήκη) | Αναμονή για συγκεκριμένες καταστάσεις στοιχείων |
| Ευέλικτη | Συγκεκριμένη | Ορισμένη συνθήκη | Υψηλότερη (χρόνος, συνθήκη, διάστημα, αγνόηση εξαιρέσεων) | Πολύπλοκα σενάρια αναμονής με διαχείριση σφαλμάτων |