【发布时间】:2021-07-22 12:13:31
【问题描述】:
- Puppeteer 版本:9.0.0
- 平台/操作系统版本:谷歌云功能
- 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 为什么page.evaluate() 没有控制台记录任何内容,也没有返回任何内容到节点环境。从三天开始,我在堆栈溢出和 GitHub 问题上尝试不同的解决方案,但直到现在都没有成功。
- 从
page.evaluate返回时,我也尝试过promise.resolve(),但这也不起作用。
【问题讨论】:
-
看起来你有一个 HTTP 函数,如果有,你需要确保它遵循Express notation。此外,您不能在函数内部创建函数,它们必须单独创建。修复此问题后,此功能可能会起作用。
标签: javascript node.js web-scraping google-cloud-functions puppeteer