сообщение console.log усекается - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в кукловоде.Раньше у меня были PhantomJS и CasperJS, но при настройке более нового сервера (freebsd 12) выяснилось, что поддержка PhantomJS прекращена, а CasperJS выдает мне ошибки сегментации.

Я смог нормально перенести свои приложения на кукловода, ностолкнулся с проблемой, что, когда я хочу захватить данные из таблицы, эти данные кажутся неполными или усеченными.

Мне нужна вся информация из таблицы, но всегда получается меньше.

Я пробовал таблицы меньшего размера, но он также урезан.Я не знаю, может ли буфер 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 во время выполнения кода.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Почему console.log не работает

Под капотом console.log используется util.inspect, который выдает выходные данные, предназначенные для отладки.Чтобы создать разумную отладочную информацию, эта функция будет обрезать вывод, который будет слишком длинным.Чтобы процитировать документы:

Метод util.inspect () возвращает строковое представление объекта, предназначенного для отладки.Выходные данные util.inspect могут измениться в любое время, и не должен зависеть программно .


Решение: Использовать process.stdout

Есливы хотите записать вывод в stdout, вы можете использовать process.stdout, который является записываемым потоком.Он не будет изменять / усекать то, что вы пишете в потоке.Вы можете использовать его следующим образом:

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

Я добавил разрыв строки в конце, так как функция не будет сама создавать разрыв строки (в отличие от console.log).Если ваш скрипт не использует его, вы можете просто удалить его.

0 голосов
/ 02 апреля 2019

Вы обязательно должны использовать stdout?Это не рекомендуется делать для мониторинга, потому что stdout очень легко переполнить буфер (или иметь неполный вывод) - как вы видели, иллюстрируя проблему.

Почему бы не изменить скрипт PHP для чтения из файла в виде потока с помощью функции readfile и записи в этот поток из кода JS с помощью fs?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...