Подождите, прежде чем делать вещи после перенаправления - Puppeteer Node.js - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь создать скрипт с Puppeteer и Node js, который размещает рекламу на веб-сайте (например, ebay или gumtree) из текстовых файлов и изображений на моем ПК

Я уже выполнил все действия с помощью логина, заполнил форму и загрузил изображения, но я не могу ничего сделать после отправки формы (я должен поставить галочку и нажать «Подтвердить»)

В журнале ошибок говорится, что не найден узел для селекторов newadSubmit, accept_rule и lbc_submit

 var promise1 = new Promise(function(resolve, reject) {
   setTimeout(function() {

    upload(getInfo(absolutePath, "#titre"), workingPath + "1.jpg", 
    workingPath + "2.jpg", 
    workingPath + "3.jpg", 
    getInfo(absolutePath, "#prix"), 
    getInfo(absolutePath, "#desc"), 
    getInfo(absolutePath, "#cp"), 
    1, 
    getInfo(absolutePath, "#num"));
}, 300);});



promise1.then(function(value) {
  page.click('#newadSubmit');
  page.waitForSelector('#accept_rule');
  page.click('#accept_rule');
  page.click('#lbc_submit');});

Кроме того, ошибка появляется еще до завершения функции upload ()

1 Ответ

0 голосов
/ 01 ноября 2018

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

await page.waitForSelector("#accpt_rule")

А также я не вижу кода, который вызывает разрешение или отклонение вашего обещания.

Обещание должно быть выполнено или отклонено должным образом после завершения загрузки.

await запрещено использовать в качестве ключевого слова верхнего уровня и должно быть помещено в асинхронную функцию. Источник
Переход на асинхронную функцию также сделает это таким, что обещания могут быть обработаны только один раз, когда вызывается асинхронная функция; пример которого приведен ниже:

async function foo () {
  await page.somepuppeterfunct();
}

foo((x) => { //Here is used to store the output of the async funct
   x...Handle expected output //This can be an 
});
...