NightmareJs + Jquery возвращает пустой JSON-ответ

Я пытаюсь разобраться с инструментами тестирования, такими как кошмар, фантом и т. Д. И, похоже, застрял с некоторыми базовыми манипуляциями с DOM. Я использую здесь jquery для последующего использования методов $(). Parent(). Я уже попробовал все возможные селекторы, которые входят в коллекцию без толку. Он возвращает только некоторые фрагменты данных. Где это на самом деле полностью существует на странице.

   ....
nightmare
    .goto(link)
    .inject('js', 'jquery-2.2.4.min.js')
    .wait()
    .evaluate( () => {
        $('.sport--head:not(.folding--open)').click()
    })
    .wait(4000)
    .evaluate( () => {
        let events = [];
        $('.view-wrapper .events--list > li').each( (i, elem) => {
            let event = {
                'name' : $(elem).text()
            }
            events.push(event);
        });
        let data = JSON.stringify(events, null, '\t');
        return data;
    })
    .end()
    ....

Возвращает пустые поля там, где их нет:

[{ "name": "" }, { "name": "" }, { "name": "" }, { "name": "contents" } ]

Почему это могло случиться? Есть идеи?

1 ответ

Вы не знаете, страницы загружаются полностью в течение 4 секунд.

Либо есть какие-то данные Ajax, и пока вы копируете их, они появляются только в этот момент. Или селектор на самом деле не так.

Вместо определенного числа используйте .wait ждать целевого селектора,

.wait(4000)
.wait('.view-wrapper .events--list > li')

Также убедитесь, что код на самом деле возвращает данные, поместив их в console.log вашего фактического браузера.

Другие вопросы по тегам