სელენიუმში რამდენიმე ელოდების ტიპის შესახებ ისაუბრეთ.
sobes.tech AI
პასუხი AI-სგან
სელენიუმის 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 წამში") # მოლოდინის დაყენება (15 წამი) ელემენტის კლიკაობისათვის 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()
შედარება:
| მოლოდინის ტიპი | გამოყენება | პირობა | მოქნილობა | გამოყენება |
|---|---|---|---|---|
| არაპირდაპირი | გლობალური | ელემენტის ძიება | დაბალი (მხოლოდ დრო) | მარტივი კონფიგურაცია ყველა ელემტისთვის |
| გამოხატული | კონკრეტული | განსაზღვრული პირობა | მაღალი (დრო, პირობა) | კონკრეტული მდგომარეობების მოლოდინი |
| მოქნილი | კონკრეტული | განსაზღვრული პირობა | უმაღლესი (დრო, პირობა, ინტერვალი, გამონაკლისების იგნორირება) | რთული მოლოდინების სცენარები, შეცდომების მართვა |