Я использую python 3.x Selenium WebDriver, и я делаю цикл for, чтобы пройти все элементы страницы с ограничением длины элементов в классе, а затем распечатать количество итераций, но он получает все видимые и скрытые элементы, как чтобы получить только видимый элемент на странице.
Чтобы получить все элементы из класса, который я использую
showMore = driver.find_elements_by_class_name('getPhotos')
вы можете перебирать список, а затем вставлять каждый элемент в новый список, если is_displayed = true? это мое последнее предположение по этому поводу, потому что я не нашел ничего лучше
@L_Church И я думаю, что это правильный подход. Если элемент виден, вставьте основанный элемент в новую коллекцию. Затем просто используйте коллекцию с найденными элементами.





Лучшим способом удовлетворить ваши требования будет создание Список, вызывающего WebDriverWait с expected_conditions как visibility_of_all_elements_located следующим образом:
showMore = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_all_elements_located((By.CLASS_NAME, "getPhotos")))
Примечание: visibility_of_all_elements_located относится к ожиданию проверки того, что все элементы присутствуют в HTML DOM страницы и являются видимыми. Видимость означает, что элементы не только отображается, но также имеют высота и ширина, то есть больше 0.
рад видеть, что это привлекло внимание ^^
Это не сработает, потому что, согласно OP, некоторые элементы видны, а некоторые нет. Этот EC будет ждать, пока не станут видимыми элементы все, что означает тайм-аут.
Вы можете взять список всех элементов (видимых и невидимых) и отфильтровать его только до тех, которые видны. Есть несколько способов сделать это ... вот один.
showMore = driver.find_elements_by_class_name('getPhotos')
onlyVisible = filter(lambda x: x.is_displayed(), showMore)
Я думаю, что синтаксис хороший, но сейчас у меня нет возможности проверить.
is_displayed работает только с (найти элемент), а не со списком (найти элементы)