Как можно извлечь данные из динамической таблицы, используя Selenium?

Как можно спарсить динамическую таблицу, используя seleniumbase (обертка для Selenium), если при прокрутке страницы старые элементы исчезают, а новые загружаются? Вот пример: в начале элемент доступен по запросу XPath:
  • 9 апреля 2025 г. 14:45
Ответы на вопрос 1
Чтобы извлечь данные из динамической таблицы с использованием Selenium и библиотеки SeleniumBase, нужно учитывать, что такие элементы часто загружаются по мере прокрутки страницы. Для этого вам нужно реализовать механизм прокрутки, чтобы загрузить все необходимые данные.

Вот пример подхода, как это можно сделать:

1. **Импортируйте необходимые библиотеки**:
   Перво-наперво, убедитесь, что у вас установлены `selenium` и `seleniumbase`.

2. **Запустите браузер и зайдите на страницу**:
   Используйте SeleniumBase для открытия страницы с таблицей.

3. **Прокручивайте страницу и собирайте данные**:
   Создайте цикл, который будет прокручивать страницу и собирать данные до тех пор, пока не достигнете конца таблицы или не загрузятся все необходимые элементы.

Вот пример кода:

```python
from seleniumbase import BaseCase
import time

class DynamicTableScraper(BaseCase):

    def test_scrape_dynamic_table(self):
        self.open("URL_Вашей_страницы")  # Укажите URL своей страницы с таблицей
        last_height = self.get_window_height()  # Получаем высоту окна

        # Массив для хранения собранных данных
        table_data = []

        while True:
            # Собираем данные из таблицы
            rows = self.find_elements('xpath', "//table//tr")  # Укажите правильный XPath для строк таблицы
            for row in rows:
                cells = row.find_elements_by_xpath(".//td")  # Получаем все ячейки в строке
                row_data = [cell.text for cell in cells]  # Собираем текст ячеек
                if row_data:  # Игнорируем пустые строки
                    table_data.append(row_data)

            # Прокручиваем страницу вниз
            self.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(2)  # Ждем загрузки контента

            # Проверяем новую высоту окна
            new_height = self.get_window_height()
            if new_height == last_height:  # Если высота не изменилась, значит мы достигли конца
                break

            last_height = new_height  # Обновляем высоту окна

        # Печатаем или обрабатываем собранные данные
        for data in table_data:
            print(data)

# Чтобы запустить тест, создайте экземпляр класса и вызовите test_scrape_dynamic_table()
```

### Важные моменты:

- **XPath**: Убедитесь, что вы используете правильные XPath для элементов, которые хотите извлечь.
  
- **Прокрутка**: Прокрутка осуществляется с помощью JavaScript; используйте `execute_script()` для выполнения прокрутки.

- **Ожидание**: Временные задержки (например, `time.sleep(2)`) могут варьироваться в зависимости от скорости загрузки контента. Вы можете использовать явное ожидание (например, `self.wait_for_element()`), если необходимо.

- **Сбор данных**: В этом примере мы собираем текст каждого из столбцов в строках таблицы. Вы можете изменять это в зависимости от ваших требований.

С использованием этого подхода вы сможете эффективно собрать данные из динамической таблицы.
Похожие вопросы