Selenium'da bir nechta kutish turlarini haqida gapiring.
sobes.tech AI
AIdan javob
No Selenium Webdriver, turli xil kutish turlari ishlatiladi, bu skript harakatlarini veb-sahifa yuklanishi bilan sinxronlashtirish uchun.
-
Noaniq kutish (Implicit Wait): Selenium sahifada elementni topishga harakat qilayotgan vaqtni maksimal belgilaydi, undan oldin
NoSuchElementExceptionxatosi chiqariladi. Bu barcha element qidiruv operatsiyalariga global tarzda ta'sir qiladi.from selenium import webdriver # Driver nusxasini yaratish driver = webdriver.Chrome() # Noaniq kutishni sozlash (10 sekund) driver.implicitly_wait(10) # Keyingi element qidiruv operatsiyalari bu kutishni ishlatadi # driver.get("http://example.com") # element = driver.find_element_by_id("some_id") # Driverni yopish # driver.quit() -
Aniq kutish (Explicit Wait): Ma'lum bir shart bajarilishini kutish uchun maksimal vaqt belgilaydi, aks holda
TimeoutExceptionxatosi chiqariladi. Bu faqat ma'lum element yoki shart uchun ishlatiladi. Buning uchunWebDriverWaitsinfi va oldindan belgilangan yoki sozlangan "kutish shartlari" (expected conditions) kerak.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 nusxasini yaratish (noaniq kutish bu yerda kerak emas, # agar faqat ma'lum elementlar uchun aniq kutish ishlatilsa) driver = webdriver.Chrome() # driver.get("http://example.com") # Elementning mavjudligini kutish (10 sekund) try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "some_id")) ) # Keyingi amal # element.click() except: # Xatoni boshqarish, agar element 10 sekund ichida topilmasa print("Element 10 sekund ichida topilmadi") # Elementga bosish mumkinligini kutish (15 sekund) try: clickable_element = WebDriverWait(driver, 15).until( EC.element_to_be_clickable((By.XPATH, "//button[@id='submit']")) ) # clickable_element.click() except: print("Element 15 sekund ichida bosish mumkin bo'lmadi") # Driverni yopish # driver.quit() -
Yumshoq kutish (Fluent Wait): Aniq kutishga o'xshash, maksimal kutish vaqtini va shartni belgilash imkonini beradi. Shuningdek, shartni tekshirish uchun polling interval va kutish davomida e'tibordan chetlatilishi kerak bo'lgan istisnalar ro'yxatini belgilash mumkin.
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 nusxasini yaratish driver = webdriver.Chrome() # driver.get("http://example.com") # Yumshoq kutishni sozlash wait = FluentWait(driver, timeout=30, poll_frequency=5, ignored_exceptions=[NoSuchElementException]) try: element = wait.until(lambda driver: driver.find_element(By.ID, "some_id")) # Keyingi amal # element.click() except: print("Yumshoq kutish bilan element topilmadi") # Driverni yopish # driver.quit()
Taqqoslash:
| Kutish turi | Qo'llanilishi | Shart | Moslashuvchanlik | Foydalanish |
|---|---|---|---|---|
| Noaniq | Global | Element qidirish | Past (faqat vaqt) | Barcha elementlar uchun oddiy sozlash |
| Aniq | Maxsus | Belirli shartlar | Yuqori (vaqt, shart) | Maxsus element holatlarini kutish |
| Yumshoq | Maxsus | Belirli shartlar | Eng yuqori (vaqt, shart, interval, e'tibordan chetlatish) | Murakkab kutish ssenariylari va xato boshqaruvi |