通过木偶师抓取网站返回未定义



我试图抓取Myntra网站。链接在这里

我使用Puppeteer和Node JS来抓取它。它工作正常,目前我收到一个错误

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

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

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

似乎该站点正在阻止在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);
}
})();

某些东西试图在null上调用.textContent。我在您的示例中没有看到它,但是如果像querySelector('.pdp-price')这样的代码找不到任何内容,就会发生这种情况 - 可能是因为页面尚未完全加载或选择器与任何内容不匹配。

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

最新更新