Puppeteer 在查询时返回 undefined

时间:2020-12-29 16:07:56

标签: javascript node.js puppeteer

我正在使用 Puppeteer 检查站点上的死链接。这些链接将包含一个 h1,其中包含“找不到页面”作为内容。我的理解是 page.evaluate 可以访问 DOM,但是当我在这里尝试使用它时,我得到了 undefined。我尝试了几种不同的方式来访问这些数据(.$.$eval),但到目前为止没有任何效果。

当我在我的开发工具中输入 document.querySelector('h1', el => el.textContent) 时,它可以正常工作。我也在设置 userAgent,所以我很确定该站点不会认为我是机器人。

const puppeteer = require('puppeteer'); 

const prepareForTests = async(page) => {
    const userAgent = 'Mozilla/5.0 (X11; Linux x86_64)' +
    'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.39 Safari/537.36';
  await page.setUserAgent(userAgent);
}

(async() => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await prepareForTests(page);

    const link = await page.goto("https://www.example.com");

    console.log(await page.evaluate(() => {
        document.querySelector('h1', el => el.textContent);
    }));

    await browser.close();
    process.exit();
})();

1 个答案:

答案 0 :(得分:1)

看来这个片段是问题所在:

console.log(await page.evaluate(() => {
  document.querySelector('h1', el => el.textContent);
}));
  1. 该函数不返回值。
  2. document.querySelector() 只接受 1 个参数,因此第二个函数被忽略。

试试这个:

console.log(await page.evaluate(() => {
  return document.querySelector('h1').textContent;
}));