我是 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
相反)。如果您的脚本不依赖它,则可以将其删除。