我正在构建一个带有两个参数的应用程序;请求网址和CSS查询选择器。我很难让请求看起来像这样:“ http:// localhost:5000 / scrapeme / us-central1 / scraperSelector?requestURL = https://www.google.com&selector=#hplogo ”。该请求不接受选择器变量,并且返回未定义。
我不太确定自己在做什么错,我尝试了不同的方法,例如request.body或创建对象并将其传递给代码。我已经阅读了Google文档,却找不到在云函数中传递多个参数的好例子。
const admin = require('firebase-admin');
const functions = require('firebase-functions');
const puppeteer = require("puppeteer");
const chalk = require("chalk");
admin.initializeApp();
// for yellow console logging
const checking = chalk.bold.yellow;
// const uri = "http://localhost:5000/scrapeme/us-central1/scraperSelector";
// const appURL = "scrapeme.firebaseapp.com";
exports.scraperSelector = functions.runWith({ memory: '1GB' }).https.onRequest(async(request, response) => {
// initialize varialbe to request params
const requestURL = request.query.requestURL;
console.log("Evaluating " + requestURL);
let selector = request.query.selector;
console.log("Evaluating " + selector);
console.log("Evaluating " + request.originalUrl);
// Launch a browser
const browser = await puppeteer.launch({
headless: true,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
// Visit the page a get content
const page = await browser.newPage();
// Go to requested URL
await page.goto(requestURL, { waitUntil: 'networkidle0' });
console.log(checking("Evaluating " + requestURL));
// find the css selector
const content = await page.evaluate(() => {
console.log(JSON.stringify(selector));
let selectorCSS = document.querySelector(selector).innerText;
console.log(selectorCSS);
return selectorCSS;
},);
// Send the response
response.json(content);
});
// Example URL of how request should look
// http://localhost:5000/scrapeme/us-central1/scraperSelector?requestURL=https://www.google.com&selector=#hplogo
我希望输出解析为JSON响应。我正在尝试从页面中抓取单个项目。{“结果”:“ $ 18.41”}
但是,我得到此输出和错误:
评估
评估/ scrapeme / us-central1 / scraperSelector?requestURL = https://www.google.com&selector=
!函数:错误:评估失败:ReferenceError:在puppeteer_evaluation_script中未定义选择器:2:36
您必须将selector
变量传递给evaluate
函数。
//...
let selector = request.query.selector;
//...
const content = await page.evaluate(selector => { // <-- add the `selector` variable.
console.log(JSON.stringify(selector));
let selectorCSS = document.querySelector(selector).innerText;
console.log(selectorCSS);
return selectorCSS;
}, selector); // <-- add the `selector` variable
阅读更多文档。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句