暴露的函数queryseldtcor在操纵up中不起作用

时间:2019-11-08 19:42:23

标签: node.js puppeteer google-chrome-headless

document.querySelectorAll('.summary').innerText;

这在我的伪造者页面的公开功能“ docTest”中的以下代码段中引发错误,指出“ document.querySelector不是函数” 我想将特定的节点传递给每种方法,并获得包含评估结果的结果。

与document.getElemenetbyId相同

const puppeteer = require('puppeteer');
//var querySelectorAll = require('query-selector');


let docTest = (document) => {
var summary = document.querySelectorAll(.summary).innerText;
console.log(summary);
return summary;
}

let scrape = async () => {

const browser = await puppeteer.launch({
    headless: false
});
const page = await browser.newPage();

await page.goto('http://localhost.com:80/static.html');
await page.waitFor(5000)
await page.exposeFunction('docTest', docTest);

var result = await page.evaluate(() => {
    var resultworking = document.querySelector("tr");
    console.log(resultworking);
    var summary  = docTest(document);
    console.log(resultworking);
    return summary;

});
console.log(result);

await page.waitFor(7000);
browser.close();
return {
    result
}
};

scrape().then((value) => {
console.log(value); // Success!
});

1 个答案:

答案 0 :(得分:1)

我只是有同样的问题。问题在于page.evaluate()函数回调必须是async函数,而函数docTest()Promise中调用时将返回page.evaluate()。要对其进行修复,只需将asyncawait关键字添加到您的代码中即可:

await page.exposeFunction('docTest', docTest);

var result = await page.evaluate(async () => {
    var summary = await docTest(document);
    console.log(summary);
    return summary;
});

请记住,page.exposeFunction()将使您的函数返回Promise,然后,您需要使用asyncawait。发生这种情况是因为您的功能不是running inside your browser,而是在您的nodejs应用程序内部。

  1. exposeFunction() does not work after goto()
  2. Why can't I access 'window' in an exposeFunction() function with Puppeteer?
  3. How to use evaluateOnNewDocument and exposeFunction?
  4. exposeFunction remains in memory?
  5. Puppeteer: pass variable in .evaluate()
  6. Puppeteer evaluate function
  7. allow to pass a parameterized funciton as a string to page.evaluate
  8. Functions bound with page.exposeFunction() produce unhandled promise rejections
  9. How to pass a function in Puppeteers .evaluate() method?
  10. How can I dynamically inject functions to evaluate using Puppeteer?