Кукольники ждут, пока не завершатся функции, ДО того, как страница закончит рендеринг - PullRequest
0 голосов
/ 11 июня 2018

Как получилось, что waitForFunction, waitForSelector, await page.evaluate и т. Д. Все выдают ошибки, ЕСЛИ Я не установил задержку в 10 секунд после прочтения страницы?страница, но без моей 10 секундной задержки (сразу после page.goto) - все они терпят неудачу с ошибками.

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch()
    const page = await browser.newPage()
    await page.goto('https://sunnythailand.com')

    console.log("Waiting 10 seconds")
    await new Promise((resolve)=>setTimeout(()=> resolve() ,10000));
    console.log("Here we go....")

    console.log("waitForFunction START")
    await page.waitForFunction('document.querySelector(".scrapebot_description").textContent.length > 0');
    console.log("waitForFunction FOUND scrapebot")

    console.log("Waiting for evaluate")
    const name = await page.evaluate(() => document.querySelector('.scrapebot_description').textContent)
    console.log("Evaluate: " + name)

    await browser.close()
})()

Моя теория состоит в том, что наша страница sunnythailand.com отправляет «конец страницы» или что-то еще ДО того, как она закончит рендеринг, а затем все функции waitFor сходят с ума и терпят неудачу со всевозможными странными ошибками.

Итак, я думаю, мой вопрос заключается в следующем: как заставить waitFor фактически ПОДОЖДАТЬ событие или класс и т.д. ...?

1 Ответ

0 голосов
/ 11 июня 2018

Не используйте тайм-аут, потому что вы не знаете, сколько времени потребуется для загрузки полной страницы.Это зависит от человека к человеку в его пропускной способности интернета.

Все, что вам нужно, чтобы положиться на обещание для вашего класса

await page.waitForSelector('.scrapebot_description'); давайте подождем вашего конкретного класса, тогда он будет работать нормально

Пожалуйста, удалите это // ждите новое обещание ((решите) => setTimeout (() => решите (), 5000));

пожалуйста, дайте мне знать ваш результат теста после этого.Я уверен, что это решит.

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