我是木偶游戏的新手。我曾经拥有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从stdout提取它。
答案 0 :(得分:2)
console.log
不起作用在后台,console.log
使用util.inspect
,它产生用于调试的输出。要创建合理的调试信息,此函数将截断输出,该输出将太长。引用文档:
util.inspect()方法返回用于调试的对象的字符串表示形式。 util.inspect的输出可能随时更改,不应以编程方式依赖。
process.stdout
如果要将输出写到stdout
,可以使用process.stdout
,它是可写的流。它不会修改/截断您在流上编写的内容。您可以像这样使用它:
process.stdout.write(JSON.stringify(data) + '\n');
我在末尾添加了一个换行符,因为该函数本身不会产生换行符(与console.log
相比)。如果您的脚本不依赖它,则可以将其删除。
答案 1 :(得分:0)
您是否绝对必须使用stdout
?不建议这样做进行监视,因为stdout
很容易溢出缓冲区(或输出不完整),正如您所看到的那样,它可以说明问题。
为什么不使用readfile
函数将PHP脚本修改为以流形式从文件中读取,并使用fs
从JS代码写入该流中?
答案 2 :(得分:0)
你也可以使用
console.log(JSON.stringify(data, null, 4));
代替
process.stdout.write(JSON.stringify(data) + '\n');