【问题标题】:Scraping of website through Puppeteer returns undefined通过 Puppeteer 抓取网站返回 undefined
【发布时间】:2020-10-07 05:17:56
【问题描述】:
我试图抓取 Myntra 网站。链接是here
我使用 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);
}
})();
【问题讨论】:
标签:
javascript
node.js
web-scraping
puppeteer
【解决方案1】:
似乎该站点正在阻止在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);
}
})();
【讨论】:
-
很高兴我的决定对您有所帮助。关于 cmets 中的感谢 - 您需要阅读 this help。谢谢你。
【解决方案2】:
某事正试图对null 的某事调用.textContent。我在您的示例中没有看到它,但如果像 querySelector('.pdp-price') 这样的代码没有找到任何东西 - 可能是因为页面尚未完全加载或选择器不匹配任何东西,就会发生这种情况。
您可以通过other options to page.goto 使其等待更长的时间,这可以让事情加载。