Подождите, прежде чем что-то делать после перенаправления — Puppeteer Node.js

Я пытаюсь создать скрипт с 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().


person Antoine Bon    schedule 01.11.2018    source источник


Ответы (1)


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

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 
});

person Pavan    schedule 01.11.2018
comment
Всем спасибо, поэтому я добавил await перед всеми операциями и сделал функцию асинхронной, теперь у меня не найден только один узел (первый). Похоже, что waitForSelector теперь ждет, но скрипт просто останавливается после перенаправления (возможно, из-за последней ошибки ) Я попытаюсь справиться с решением и отклонением - person Antoine Bon; 01.11.2018