Joh*_*ton 5 javascript google-chrome node.js puppeteer
我是木偶戏的新手。我曾经有 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);
Run Code Online (Sandbox Code Playgroud)
我应该能够获得所有行,但我得到了这个
[ '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 ]
Run Code Online (Sandbox Code Playgroud)
我需要其他 86 件物品!!!因为我在执行代码时让 PHP 从标准输出中提取它。
Tho*_*orf 14
console.log不起作用在幕后,console.log使用util.inspect,它产生用于调试的输出。为了创建合理的调试信息,此函数将截断过长的输出。引用文档:
util.inspect() 方法返回用于调试的对象的字符串表示。util.inspect 的输出可能随时更改,不应以编程方式依赖。
process.stdout如果要将输出写入,stdout可以使用process.stdoutwhich 是可写流。它不会修改/截断您在流上写的内容。你可以这样使用它:
process.stdout.write(JSON.stringify(data) + '\n');
Run Code Online (Sandbox Code Playgroud)
我在最后添加了一个换行符,因为该函数本身不会产生换行符(与 相比console.log)。如果您的脚本不依赖它,您可以简单地将其删除。
小智 11
您还可以使用
console.log(JSON.stringify(data, null, 4));
Run Code Online (Sandbox Code Playgroud)
代替
process.stdout.write(JSON.stringify(data) + '\n');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7947 次 |
| 最近记录: |