Не удается найти веб-страницу модуля с помощью PhantomJS - PullRequest
0 голосов
/ 03 мая 2018

Я использую PhantomJS для поиска слов на веб-странице, я попытался настроить его следующим образом:

const phantomjs = require("phantomjs-prebuilt");

if (cmd === `${prefix}check`) {
    let word = (args[0]);
    var page = require('webpage').create();
    page.open('https://discordapp.com/channels/000/000', function(err, data) {
        if (err) throw err;
        if (data.indexOf(word) >= 0) {
            message.reply(word+ ' Found!');
        } else {
            message.reply(word+ ' Not found.');
        }
    });
}

Однако я получаю следующую ошибку:

(узел: 3520) UnhandledPromiseRejectionWarning: Ошибка: не удается найти модуль "веб-страница"

Что вызывает это?

Редактировать Я только что увидел, что он не работает с Node JS, возможно ли вызвать отдельный файл JS и передать (args[0]);?

1 Ответ

0 голосов
/ 03 мая 2018

Если вы хотите использовать PhantomJS из node.js, вы можете использовать для этого несколько пакетов, одним из которых является phantom . Он поддерживает функции Promises и async / await:

const phantom = require('phantom');

(async function() {
  const instance = await phantom.create();
  const page = await instance.createPage();
  await page.on('onResourceRequested', function(requestData) {
    console.info('Requesting', requestData.url);
  });

  const status = await page.open('https://stackoverflow.com/');
  const content = await page.property('content');
  console.log(content);

  await instance.exit();
})();

Конечно, вы можете просто запустить PhantomJS из командной строки и передать ему необходимые аргументы:

phantomjs script.js https://stackoverflow.com

и затем получить их в сценарии с помощью system.args

var system = require('system');
var args = system.args;

if (args.length === 1) {
  console.log('Try to pass some arguments when invoking this script!');
} else {
  args.forEach(function(arg, i) {
    console.log(i + ': ' + arg);
  });
}

Обратите внимание, что вы используете page.open неправильно, в сигнатуре функции обратного вызова нет data var. Если вы хотите получить все содержимое страницы, обратитесь к page.content variable:

page.open('http://phantomjs.org', function (status) {
  var content = page.content;
  console.log('Content: ' + content);
  phantom.exit();
});
...