将Puppeteer页面作为函数中的参数传递无法正常工作

时间:2019-10-10 13:04:14

标签: javascript web-scraping jquery-selectors puppeteer

简介

loginLinkedin带我进入登录页面,然后为我返回伪造者页面,该页面随后被分配给root用户,因此我仍然可以有更多选择来使用它。

const root = await loginToLInkined("https://www.linkedin.com/login");

    await root.goto(url);
    max_page = await getMaxPage(root);
    console.log("max page",max_page)

然后我goto(url)

url是我需要转到的另一页。

此后,我以root为参数调用getMaxPage(root),以便可以在该函数中evaluate()

问题

const getMaxPage = async root => {
  const maxPage = await root.evaluate(()=> {
    return document.querySelector(
      "li.artdeco-pagination__indicator:nth-last-Child(1)"
    );
  });
  console.log(maxPage)
  return parseInt(maxPage.innerText);
};

问题是当我console.log(maxPage)返回未定义状态时,我意识到添加根s参数实际上并没有达到我的预期效果。

我做错了什么以及如何正确完成。

请注意,我实际上已经尝试过root.evaluate,而没有添加函数并将root添加为参数,它实际上为我返回了maxpage

1 个答案:

答案 0 :(得分:2)

问题出在从page.evaluate()返回的 中:

const maxPage = await root.evaluate(()=> {
    return document.querySelector(
      "li.artdeco-pagination__indicator:nth-last-Child(1)"
    );
});

这是一个DOM节点,它是一个不能serialized的复杂对象,并且返回值必须可序列化才能从Chromium返回到节点。

因此,要解决此问题,所有以后的脚本仅返回所需的内容,并且可以JSON.stringify进行正确无误的返回。正如pguardiario在注释中正确指出的,在这种情况下,足以从该节点返回innerText

const maxPage = await root.evaluate(()=> {
  return document.querySelector("li.artdeco-pagination__indicator:nth-last-Child(1)").innerText;
});