人偶查询选择器 returns 空
Puppeteer querySelector returns null
我正在尝试使用 puppeteer 删除一些数据,但对于某些网站 querySelector returns null,我不知道出了什么问题。我在 Whosebug 中找到了有关此问题的一些答案,但其中 none 有效。这是带有示例的代码 link 不起作用。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.macys.com/shop/product/the-north-face-mens-
logo-half-dome-t-shirt?ID=2085687&CategoryID=30423&cm_kws=2085687');
const textContent = await page.evaluate(() => {
return document.querySelector('.price');
});
console.log(textContent);
browser.close();
})();
可能这些元素是通过 javascript 异步加载的,并且在您调用 .evaluate() 时仍然不在 DOM 中。
尝试使用 puppeteer .waitForSelector 函数等待选择器
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.macys.com/shop/product/the-north-face-mens-
logo-half-dome-t-shirt?ID=2085687&CategoryID=30423&cm_kws=2085687');
await page.waitForSelector('.price');
const textContent = await page.evaluate(() => {
return document.querySelector('.price');
});
console.log(textContent);
browser.close();
})();
拍完页面快照后,发现我的请求被机器人检测系统阻止了。这是解决方案。我们只需要传递更多数据,这样它就不会被检测为机器人。如果仍然无法正常工作,您可以查看 this tutorial。
const puppeteer = require('puppeteer');
// This is where we'll put the code to get around the tests.
const preparePageForTests = async (page) => {
// Pass the User-Agent Test.
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 preparePageForTests(page);
// await page.setRequestInterception(true);
await page.goto('websiteURL');
const textContent = await page.evaluate(() => {
return {document.querySelector('yourCSSselector').textContent,
}
});
console.log(textContent);
browser.close();
我正在尝试使用 puppeteer 删除一些数据,但对于某些网站 querySelector returns null,我不知道出了什么问题。我在 Whosebug 中找到了有关此问题的一些答案,但其中 none 有效。这是带有示例的代码 link 不起作用。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.macys.com/shop/product/the-north-face-mens-
logo-half-dome-t-shirt?ID=2085687&CategoryID=30423&cm_kws=2085687');
const textContent = await page.evaluate(() => {
return document.querySelector('.price');
});
console.log(textContent);
browser.close();
})();
可能这些元素是通过 javascript 异步加载的,并且在您调用 .evaluate() 时仍然不在 DOM 中。
尝试使用 puppeteer .waitForSelector 函数等待选择器
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.macys.com/shop/product/the-north-face-mens-
logo-half-dome-t-shirt?ID=2085687&CategoryID=30423&cm_kws=2085687');
await page.waitForSelector('.price');
const textContent = await page.evaluate(() => {
return document.querySelector('.price');
});
console.log(textContent);
browser.close();
})();
拍完页面快照后,发现我的请求被机器人检测系统阻止了。这是解决方案。我们只需要传递更多数据,这样它就不会被检测为机器人。如果仍然无法正常工作,您可以查看 this tutorial。
const puppeteer = require('puppeteer');
// This is where we'll put the code to get around the tests.
const preparePageForTests = async (page) => {
// Pass the User-Agent Test.
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 preparePageForTests(page);
// await page.setRequestInterception(true);
await page.goto('websiteURL');
const textContent = await page.evaluate(() => {
return {document.querySelector('yourCSSselector').textContent,
}
});
console.log(textContent);
browser.close();