替换Puppeteer抓取结果中缺少的元素

时间:2019-06-02 19:28:49

标签: javascript puppeteer

我使用脚本通过Puppeteer递归地抓取数据。它可以正常工作,但有时页面结构中缺少元素,此时脚本崩溃。

我想设置一个条件,以防元素丢失。我尝试了几种添加条件但没有成功的方法,例如使用if / else检查元素是否存在。这里有一个有趣的线程:Continue on Null Value of Result (Nodejs, Puppeteer),但是我无法在Array.from结构中复制解决方案。有办法实现吗?欢迎任何开始的指示。

这是脚本中查询元素的一部分:

  const results = await page.evaluate(() => 
          Array.from(document.querySelectorAll('article.main-wrap section'), value => ({
             name: value.querySelector('h1.title').innerText.trim(),
             frame: value.querySelector('ul li:nth-child(3)').innerText.trim(),
             // more elements to scrap
          }))
    );

当页面结构中缺少期望的元素时,我想替换键,值对中的值,例如“ null”。也许在Array.from中可以使用某种三元语法,但是我什么也找不到。

1 个答案:

答案 0 :(得分:1)

您可以使用三元运算符检查querySelector是否返回真实值:

const results = await page.evaluate(() => 
    Array.from(document.querySelectorAll('article.main-wrap section'), value => ({
        name: value.querySelector('h1.title') 
            ? value.querySelector('h1.title').innerText.trim()
            : 'falsy value',
        frame: value.querySelector('ul li:nth-child(3)') 
            ? value.querySelector('ul li:nth-child(3)').innerText.trim()
            : 'falsy value',
    }))
);
相关问题