Puppeteer的page.evaluate()在电子中使用时总是返回空对象

问题描述 投票:0回答:1

我正在尝试在Electron中创建UI,以便在Puppeteer中进行刮板操作。每次我使用page.evaluate()时,都会返回一个空对象[object Object],这是一个例子:

const puppeteer = require('puppeteer');

const scrape = async () => {
  const browser = await puppeteer.launch({
    executablePath: '/usr/bin/google-chrome',
    headless: true,
  });

  const page = await browser.newPage();

  await page.goto("https://google.com/", {
    waitUntil: 'networkidle2',
    timeout: 90000
  });

  const length = await page.evaluate(`selector => {
    return Array.from(document.querySelectorAll(selector)).length;
  }`, 'div');

  await page.close();
  await browser.close();

  return length;
}

document.querySelector("button").addEventListener("click", async function() {
  const divs_len =  await scrape();
  const par = document.querySelector('#par');
  par.innerText = divs_len;
});

// par shows [object Object]
javascript node.js electron puppeteer evaluate
1个回答
0
投票

page.evaluate()参数中,可以使用将被调用的函数表达式或具有将要执行的直接代码的字符串。如果以字符串形式发送函数表达式,则page.evaluate()仅返回对此函数的引用,由于该函数不可序列化,该引用成为空对象。试试这个:

  const length = await page.evaluate(selector => {
    return Array.from(document.querySelectorAll(selector)).length;
  }, 'div');
© www.soinside.com 2019 - 2024. All rights reserved.