当websocket连接打开时,PhantomJS不会启动

时间:2016-06-05 18:23:26

标签: javascript node.js websocket phantomjs casperjs

我正在研究松弛机器人,我遇到了好奇的问题。我有一个模块使用phantomJS(通过SpookyJS& CasperJS)在网页上抓取网页。我编写了这个模块并测试了它从命令行手动运行它。它运作良好。但后来我添加了slackbots npm模块,该模块抽象了Slack实时API,并创建了一个带有bot类的模块。这个bot模块需要我的模块使用抓取代码(phantomJS)并在消息事件触发时调用它的函数:

var getAnswer = require('./getAnswer');

myBot.prototype._onMessage = function (message) {
    if (this._isChatMessage(message) &&
        this._isChannelConversation(message) &&
        this._isMentioningMe(message)) {

        this._reply(message);
    }
};

this._reply基本上只是调用getAnswer(originalMessage.text)然后调用self.postMessageToChannel(channel.name, reply, {as_user: true});

getAnswer返回一个承诺,但它永远不会得到满足。我让CasperJS成为verbose并且看到

后没有任何反应
[info] [phantom] Starting...

一切都挂了......

我不知道,如何解决这个问题。我想这是因为slackbots模块在​​我调用Bot.prototype.run时建立了websocket连接。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

正如我所说,我使用Spooky来生成孩子CasperJS过程。我去了Spooky文档页面并阅读:

  

具体来说,每个Spooky实例都会生成一个子Casper进程   运行引导脚本。引导脚本设置JSON-RPC   侦听来自父Spooky实例的命令的服务器   传输(HTTP或stdio)。该脚本还设置了JSON-RPC   通过stdout将事件发送到父Spooky实例的客户端。

我使用http作为传输但它不起作用,因此我将其更改为stdio并且它有所帮助。如果有人能解释为什么有帮助,我会很感激吗?