【问题标题】:Wait before doing stuff after a redirection - Puppeteer Node.js重定向后做事前等待 - Puppeteer Node.js
【发布时间】:2019-04-05 18:58:12
【问题描述】:

我正在尝试使用 Puppeteer 和 Node js 制作一个脚本,该脚本可以从我的 PC 上的文本文件和图像在网站(如 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()函数完成之前就出现了

【问题讨论】:

    标签: javascript node.js web-scraping puppeteer ads


    【解决方案1】:

    您应该在 puppeteer 中使用 await 关键字来执行异步任务,如下所示。

    await page.waitForSelector("#accpt_rule")
    

    而且我也没有看到任何调用解决或拒绝您的承诺的代码。

    上传完成后需要正确解决或拒绝承诺。

    await 不允许用作顶级关键字,必须放在异步函数中。 Source
    更改为 async 函数也将使得 Promise 可能只处理一次,其中调用了 async 函数;其中,下面有一个例子:

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

    【讨论】:

    • 谢谢大家,所以我在所有操作之前添加了等待并使函数异步,现在我只有一个节点未找到(第一个) waitForSelector 现在似乎在等待,但脚本在重定向(可能是因为最后一个错误)我会尝试处理解决和拒绝
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 2021-07-15
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多