بايثون سيلينيوم: ضمان تحميل عناصر متعددة
عند التعامل مع العناصر المحملة ديناميكيًا عبر AJAX، قد يكون من الصعب تأكيد مظهرها. للتعامل مع هذا السيناريو، سنستخدم WebDriverWait الخاص بـ Selenium واستراتيجياته المختلفة لضمان وجود عناصر متعددة.
رؤية جميع العناصر:
للتحقق من رؤية جميع العناصر:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
elements = WebDriverWait(driver, 20).until(
EC.visibility_of_all_elements_located(
(By.CSS_SELECTOR, "ul.ltr li[id^='t_b_'] > a[id^='t_a_'][href]")
)
)
من selenium.webdriver.support.ui استيراد WebDriverWait من selenium.webdriver.common.by استيراد بواسطة من selenium.webdriver.support قم باستيراد الشروط المتوقعة كـ EC العناصر = WebDriverWait (سائق، 20). حتى ( EC.visibility_of_all_elements_located( (بواسطة.CSS_SELECTOR، "ul.ltr li[id^='t_b_'] > a[id^='t_a_'][href]") ) )
انتظار عدد محدد من العناصر:
WebDriverWait(driver, 20).until(
lambda driver: len(driver.find_elements_by_xpath(selector)) > int(myLength)
)
WebDriverWait(driver, 20).until( برنامج تشغيل لامدا: len(driver.find_elements_by_xpath(selector)) > int(myLength) )
XPath للعناصر الفرعية:WebDriverWait(driver, 20).until(
EC.presence_of_element_located(
(By.XPATH, "//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_')]")
)
)
WebDriverWait(سائق، 20).حتى( EC.presence_of_element_located( (بواسطة.XPATH، "//ul[@class='ltr']//li[starts-with(@id, 't_b_')]/a[starts-with(@id, 't_a_')]") ) )
شروط الانتظار المخصصة:class MoreThanOne(webdriver.support.ui.ExpectedCondition):
def __init__(self, selector):
self.selector = selector
def __call__(self, driver):
elements = driver.find_elements_by_css_selector(self.selector)
return len(elements) > 1
فئة MoreThanOne(webdriver.support.ui.ExpectedCondition):
تعريف __init__(ذاتي، محدد):
self.selector = Selector
Def __call__(النفس، السائق):
العناصر = driver.find_elements_by_css_selector(self.selector)
return len(elements) > 1WebDriverWait(driver, 30).until(MoreThanOne('li'))
WebDriverWait(driver, 30).until(MoreThanOne('li'))منع فقدان العناصر في DOM:
لتجنب فقدان العنصر الحالي بعد عملية البحث، قم بتخزينه في متغير قبل إجراء عملية البحث انتظر:WebDriverWait(driver, 30).until(MoreThanOne('li'))
element = driver.find_element_by_css_selector('ul')
WebDriverWait(element, 30).until(MoreThanOne('li'))الخلاصة:
توفر هذه التقنيات طريقة مرنة وقوية لانتظار تحميل عناصر متعددة في السيلينيوم. بناءً على متطلباتك، اختر النهج الذي يناسب حالة الاستخدام الخاصة بك.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3