提问者:小点点

通过Puppeteer抓取网站返回未定义


我想从Myntra网站上挖出来。 链接在这里

我用Puppeteer和Node JS来刮它。 它运行良好,但目前我得到了一个错误

Error: Evaluation failed: TypeError: Cannot read property 'textContent' of null
at __puppeteer_evaluation_script__:2:55

函数返回一个空对象。 我在下面附上了我的代码。

null

const puppeteer = require('puppeteer');

(async () => {
  try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://www.myntra.com/jeans/only/only-women-black-skinny-fit-mid-rise-low-distress-stretchable-cropped-jeans/10973332/buy');
    const body = await page.evaluate( () => {
     return document.querySelector('.pdp-price') ;
    });
    console.log(body);

    await browser.close();
  } catch (error) {
    console.log(error);
  }
})();

null


共2个答案

匿名用户

似乎这个站点正在阻止在user-agent中指定headlesschrome的请求,因此我更改了user-agent,现在一切都按您的需要工作。 请尝试以下代码:

const puppeteer = require('puppeteer');

(async () => {
  try {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setExtraHTTPHeaders({
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
    });
    await page.goto('https://www.myntra.com/jeans/only/only-women-black-skinny-fit-mid-rise-low-distress-stretchable-cropped-jeans/10973332/buy');
    const body = await page.evaluate(() => {
        return document.querySelector('.pdp-price').textContent;
    });
    console.log(body);
    await browser.close();
  } catch (error) {
    console.log(error);
  }
})();

匿名用户

某个对象正在尝试调用.TextContent,该对象为Null。 我在您的示例中没有看到它,但是如果QuerySelector('.pdp-price')这样的代码没有找到任何东西,就会发生这种情况--可能是因为页面还没有完全加载或者选择器没有匹配任何东西。

您可以将其他选项传递给page.goto以使其等待更长时间,这可能会让内容加载。