我是 puppeteer 游戏的新手。我曾经拥有PhantomJS和CasperJS,但是在设置更新的服务器(freebsd 12)时发现对PhantomJS的支持消失了,而CasperJS给了我段错误。

我可以将应用程序很好地移植到puppeteer,但是遇到了一个问题,当我想从表中捕获数据时,该数据似乎不完整或被 chop 。

我需要一张表中的所有信息,但总会变得越来越少。

我尝试过较小的桌子,但它也被 chop 了。
我不知道console.log缓冲区是否可以扩展,或者是否有更好的方法来获取表中所有tds的值。

const data = await page.$$eval('table.dtaTbl tr td', tds => tds.map((td) => {
    return td.innerHTML;
}));

console.log(data);

我应该能够得到所有行,但我却得到了

[ 'SF xx/xxxx 3-3999 06-01-16',
'Sample text - POLE',
  '',

 /* tons of other rows (removed by me in this example) <- */

  '',

 /* end of output */ ... 86 more items ]

我还需要其他86个物品!!!
因为我在执行代码时让PHP从stdout拾取它。

最佳答案

为什么console.log不起作用

在幕后,console.log使用 util.inspect ,它产生用于调试的输出。要创建合理的调试信息,此函数将 chop 输出,该输出将太长。引用文档:



解决方案:使用process.stdout
如果要将输出写入stdout,则可以使用 process.stdout (可写流)。它不会修改/chop 您在流上编写的内容。您可以像这样使用它:

process.stdout.write(JSON.stringify(data) + '\n');

我在最后添加了一个换行符,因为该函数本身不会产生换行符(与console.log相反)。如果您的脚本不依赖它,则可以将其删除。

10-02 03:24