1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/g1879-DrissionPage

 / Детали:

Список элементов для ленивой загрузки

Предстоит сделать
Владелец
Создано  
14.03.2025

Перед созданием issue, пожалуйста, убедитесь, что вы поставили звездочку этому репозиторию, это очень важно для меня.
Инструкция по использованию доступна в документации, там все есть.
Проблемы с использованием могут быть не сразу решены авторами, но вы можете задать вопрос на платформе Zhihu Star, ответ будет дан как можно скорее.
Zhihu Star
Пожалуйста, опишите вашу проблему следующими пунктами:

  1. Какую проблему вы встретили? В каких условиях она возникла? Как её воспроизвести?
  2. Приложите код и сообщение об ошибке.
  3. Укажите версии DrissionPage, браузера и Python.
  4. Есть ли какие-либо предложения или замечания?
    Напишите основной текст ниже, не вставляйте его в вышеуказанные пункты.

Совет: Добавьте метод ленивой загрузки для eles. В настоящее время многие списки элементов загружаются динамически, при прокрутке страницы список элементов продолжает увеличиваться. Я считаю необходимым наличие метода, аналогичного listen.steps(), чтобы динамически загружать список элементов. В данный момент я использую новый итератор для реализации этого в локальной среде, но хотел бы видеть такой метод в библиотеке.
Пример: https://www.zhipin.com/web/geek/job-recommend?ka=header-job-recommend
XPath для лениво загружаемого списка элементов: //div[starts-with(@class, 'job-card-wrap')]
Класс внешнего объекта:```python
class LazyLoadElementList:
def init(self, tab, xpath):
# Получаем начальный список элементов при инициализации
self.tab = tab
self.xpath = xpath
self.element_list = tab.eles(xpath)
self.current_index = 0

def __iter__(self):
    return self  # Возвращаем себя как итератор

def __next__(self):
    # Проверяем, закончился ли текущий список элементов
    if self.current_index < len(self.element_list):
        element = self.element_list[self.current_index]
        self.current_index += 1
        return element
    else:
        # Если нет новых элементов, попробуем загрузить больше
        self.load_more_elements()
        # Если после загрузки всё ещё нет новых элементов, выбрасываем StopIteration
        if self.current_index >= len(self.element_list):
            raise StopIteration
        element = self.element_list[self.current_index]
        self.current_index += 1
        return element

def load_more_elements(self):
    """Метод имитирует прокрутку для загрузки новых элементов и обновляет список элементов."""
```markdown
# Вы можете здесь запустить процесс загрузки новых элементов путём прокрутки страницы или другими способами
новые_элементы = self.tab.eles(self.xpath)
# Определяем, появились ли новые элементы
if len(новые_элементы) > len(self.element_list):
    self.element_list = новые_элементы  # Обновляем список элементов
    # Здесь можно добавить задержку прокрутки или другие действия, для примера используется простое ожидание
    time.sleep(1)

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/g1879-DrissionPage.git
git@api.gitlife.ru:oschina-mirror/g1879-DrissionPage.git
oschina-mirror
g1879-DrissionPage
g1879-DrissionPage