Как получить всю таблицу, используя селен, когда реакция показывает только его часть - PullRequest
0 голосов
/ 22 сентября 2019

Пример сайта:

https://listen.tidal.com/view/pages/single-module-page/b4104df9-ee72-4c3d-a7b4-30fa61faf56d/5/889e7c2a-e3be-472b-9801-bf6b40655050/1?artistId=8992

Я использую css для извлечения строк вроде:

div[role=row]

, поэтому код похож на

dirver.findElementsByCss(div[role=row])

, а число - это только количество отображаемых, то есть видимых строк, а не целых строк.Как создать скрипт, который может принимать все строки?

1)

Я пытался уменьшить как здесь , ошибка:

  • это уменьшает масштаб в терминах CSS, а не в браузере, и в этом случае бесполезно

  • Уменьшение имеет свои пределы

2)

прокрутка вниз кажется не совсем оптимальным и не совсем неточным способом выполнения подобных действий

Я использую ChromeDriver для Crome 77 и python

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Поскольку в этой таблице используется React, элементы даже не будут существовать на странице, если вы не прокрутите их вниз.Я знаю, что вы упомянули, что прокрутка не является оптимальным решением, но если вам нужны все строки в таблице, прокрутка является единственным выбором здесь.

Я реализовал пример метода ScrollDown, который использует координаты для прокрутки внизстраница.Код написан на C #, но идея аналогична и для других языков.

Для прокрутки с использованием Javascript вам потребуется указать координаты для прокрутки.Если вы хотите прокрутить несколько раз - например, прокрутить вниз, получить строки таблицы, продолжить прокрутку вниз и получить строки таблицы до достижения конца таблицы - вам нужно обновить yCoordinate, с которым вы прокручиваете.Поскольку прокрутка - это процесс повышения / понижения, вы можете использовать один и тот же xCoordinate каждый раз.

Относительно increment - эта переменная указывает, насколько вы хотите прокрутить сразу.increment должно быть равно количеству пикселей, которые вы хотите прокрутить.Если вы хотите прокрутить 3 строки одновременно, а каждая строка имеет высоту 100 пикселей, вам нужно установить increment на 300.

Поскольку я не знаю размер или макет вашей страницы, я не могу предоставитьболее подробный метод для вас.Я рекомендую реализовать этот метод и поэкспериментировать с различными координатами x / y для прокрутки, чтобы получить персонализированное решение для вашего тестового приложения.

public void ScrollDown(int startX, int startY, int increment, int numberOfScrolls) 
{
    // cast webdriver to javascript executor
    var executor = ((IJavaScriptExecutor) driver);

    // keep track of current y coordinate
    // since we are scrolling down, y coordinate will change with each scroll
    var currentYCoordinate = startY;

    // scroll down in a loop
    for (int i = 0; i < numberOfScrolls; i++)
    {
        // scroll down
        executor.ExecuteScript("window.scrollTo({startX}, {currentYCoordinate});");

        // todo: implement any FindElement methods to get the new elements which have been scrolled into view.

        // update y coordinate since we just scrolled down
        currentYCoordinate = currentYCoordinate + increment;

     }
}
0 голосов
/ 25 сентября 2019

Для сайтов с сетками, в которых реализована отложенная загрузка.- Вы можете получить доступ к данным, используя методы компонентов сетки.- или вы можете использовать devtools> network, чтобы проверить запрос / ответ, который выдает данные, и попытаться повторить запрос.

В вашем примере данные, которые вы ищете, находятся в элементах pagedList>.enter image description here

Теоретически вы должны быть в состоянии повторить этот вызов API, используя библиотеку API отдыха Python.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...