Как использовать JavaScript, чтобы получить весь элемент из динамического списка прокрутки c? - PullRequest
0 голосов
/ 13 апреля 2020

Как сказано в названии, как мне получить все элементы из div прокрутки? Элементы в списке прокрутки загружаются и уничтожаются динамически.

I попытался отсканировать все названия курсов с этого сайта: https://public.enroll.wisc.edu/search?term=1204

Приведенный ниже код работает только один раз:

let list = document.getElementsByClassName('md-virtual-repeat-scroller')[0]
let childs = document.getElementsByClassName("result__name")
console.log(childs[0].innerText)

Однако, если я это сделаю, Я получу один и тот же результат 10 раз:

let list = document.getElementsByClassName('md-virtual-repeat-scroller')[0]
for(let i = 0; i < 10; i++) {
    let childs = document.getElementsByClassName("result__name")
    for(let j = 0; j < childs.length; j++) {
        console.log(childs[j].innerText) 
    }
    // scroll by 1000px every time
    list.scrollBy(0, 1000) 
}

Я не знаю, в чем проблема. Это потому что scrollBy () работает асинхронно ? Но я попытался использовать asyn c и жду. Это все еще не работает.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Дайте больше информации, используя как можно меньше слов. Например, многие проблемы могут быть связаны с браузером и его версией. Как называется этот скрипт? Вы даете команды через консоль браузера? Вы сделали копию сайта и внесли какие-то изменения в нее? Трудно понять проблему на реалистичном уровне c.

Совет. Избегайте использования innerText . Он медленнее и поддерживается во многих браузерах только для совместимости со скриптами, написанными для старых версий IE. (Я не знаю, почему так много примеров в inte rnet используют его как первый вариант). Пользователь textContent вместо.

Всегда полезно проверить возвращаемое значение функции / метода - особенно во время разработки программы.

Никогда не спрашивать сообщество StackOverFlow (и для любого другого), чтобы написать программы для вас!

Вы задаете вопрос «как мне получить все элементы из div прокрутки?» настолько «свободен». прокрутить div? Ответ на этот вопрос, независимо от «типа div» (и тега!), Будет найден ниже.

Ваш код, кажется, не имеет смысла делать то, что вы хотите. Зачем повторять от 0 до 10?

Посмотрите на этот фрагмент. Я думаю, что это поможет вам

const list = document.getElementsByClassName('md-virtual-repeat-scroller')[0];// if there is no intention to reassign it. Use [0] if you are sure it's the first element of this collection
let childs = list.getElementsByClassName("result__name"); // get only elements inside the first variable!

Используйте итератор переменной.

for(item of childs) 
{
 /*code*/ 
}

Я уверен, что вы достигнете своих целей!

И никогда не предлагайте нам (Сообщество), чтобы написать код для вас или даже решить вашу проблему. Этот звук очень агрессивный! И вам тоже! Я уверен.

0 голосов
/ 21 апреля 2020

Я решил свою проблему, прочитав эту статью: https://intoli.com/blog/scrape-infinite-scroll/

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

Пожалуйста, прочитайте статью, очень полезно.

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