- Puppeter版本:9.0.0
- 平台/OS版本:谷歌云功能
- Node.js版本:14
const puppeteer = require('puppeteer')
exports.MyFunc = function MyFunc(req, res) {
MyFunc(req, res);
async function MyFunc(req, res) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await getSearchResults();
async function getSearchResults() {
const url = `https://abc.redacted.com/search?q=${query}&f=&orderBy=${sort_by}&skip=0&take=10`;
console.log(url);
await page.goto(url, { waitUntil: "domcontentloaded" });
console.log("Page downloaded"); // It console logs till here
const getResults = await page.evaluate(() => {
let items = [];
const results = document.querySelectorAll(
"#mainArea > router-view > ma-serp > div > div.results > div > compose > div > div.results > ma-card"
);
console.log(results);
for (let result of results) {
console.log(result.querySelector("span")?.innerText ?? "");
items.push({ title: result.querySelector("span")?.innerText ?? "", })
};
return items;
});
const data = getResults;
res.status(200).json(data); // just getting {}
await browser.close();
}
}
}
IDK why,但page.evaluate()
不控制台记录任何内容,也不向节点环境返回任何内容。三天以来,我一直在尝试不同的解决方案来解决堆栈溢出和GitHub问题,但直到现在都没有成功。
- 从
page.evaluate
返回时,我也尝试过promise.resolve()
,但也不起作用
运行page.evaluate()
时,实际上是在浏览器上下文中操作,而不是在Node中操作。因此console.log
输出到浏览器上下文,您将不会在Node控制台中看到任何内容。
以下是将浏览器上下文输出到节点控制台的解决方法:
const page = await browser.newPage();
page.on('console', consoleObj => console.log(consoleObj.text()));
参考:页面内的Puppeter日志。评估