javascript - console.log 消息被截断
问题描述
我是木偶新手。我曾经拥有 PhantomJS 和 CasperJS,但是在设置更新的服务器(freebsd 12)时发现对 PhantomJS 的支持已经消失,并且 CasperJS 给了我分段错误。
我能够很好地将我的应用程序移植到 puppeteer,但遇到了一个问题,即当我想从表中捕获数据时,这些数据似乎不完整或被截断。
我需要一张桌子上的所有信息,但总是得到更少。
我尝试过较小的表,但它也被截断了。我不知道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 从标准输出中获取它。
解决方案
为什么console.log
不起作用
在后台,console.log
使用util.inspect
,它产生用于调试的输出。为了创建合理的调试信息,此函数将截断过长的输出。引用文档:
util.inspect() 方法返回用于调试的对象的字符串表示形式。util.inspect 的输出可能随时更改,不应以编程方式依赖。
解决方案:使用process.stdout
如果您想向其中写入输出,stdout
可以使用process.stdout
可写流。它不会修改/截断您在流上写入的内容。你可以像这样使用它:
process.stdout.write(JSON.stringify(data) + '\n');
我在末尾添加了换行符,因为该函数本身不会产生换行符(与 相比console.log
)。如果您的脚本不依赖它,您可以简单地删除它。
推荐阅读
- forms - 未收到 Formsubmit.co 激活电子邮件
- javascript - 为什么 navigator.mediaDevices.enumerateDevices() 返回不同的值?
- javascript - 无法读取 discord.js 中未定义的属性“缓存”
- ios - 如何在一个集合视图中获取多个集合单元而不创建 XIB
- laravel - laravel 图像验证总是失败
- typescript - 尝试返回地图时“没有重载匹配此调用”
- zoho - Zoho creator 与 zoho 图书的集成
- javascript - 如何在视频中制作多个缓冲区?(互动视频JAVASCRIPT)
- python - 使用 python 3.6 Tkinter 和 cx_Freeze 或 PyInstaller(使用 dlib)创建可执行文件,但由于 dlib,DLL 无法加载
- java - Thymeleaf with mule 无法解析资源下的 HTML 路径