Вы не должны зависеть от того, возвращает ли Selenium элементы в том же порядке, в каком они отображаются на веб-странице, или Дерево DOM .
Каждый WebElement в пределах HTML DOM может быть однозначно идентифицирован с помощью одной из стратегий локатора .
Хотя вы смогли вытащить все необходимые элементы, используя find_elements_by_class_name()
, следующим образом:
rows = driver.find_elements_by_class_name("data-row")
В идеале вам нужно вызвать WebDriverWait для visibility_of_all_elements_located()
, и вы можете использовать любую из следующих Стратегий локатора :
Использование CLASS_NAME
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "data-row")))
Использование CSS_SELECTOR
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".data-row")))
Использование XPATH
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@class='data-row']")))
Примечание : необходимо добавить следующие операции импорта:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Подробное обсуждение можно найти в WebDriverWait не работает должным образом