当前位置: 首页 > 面试题库 >

phantomjs可以与node.js一起使用吗?

尹雅健
2023-03-14
问题内容

我想在我的node.js脚本中使用phantomjs。有一个phantomjs-
node
库。.但是不幸的是,作者使用了这个奇怪的coffee脚本代码来解释他在做什么:

phantom = require 'phantom'

phantom.create (ph) ->
  ph.createPage (page) ->
    page.open "http://www.google.com", (status) ->
      console.log "opened google? ", status
      page.evaluate (-> document.title), (result) ->
        console.log 'Page title is ' + result
        ph.exit()

现在,如果我直接将phantomjs与javascript一起使用,它将看起来像这样:

var page = require('webpage').create();
page.open(url, function (status) {
    var title = page.evaluate(function () {
        return document.title;
    });
    console.log('Page title is ' + title);
});

所以基本上我想用普通的javascript编写上面代码的第一段代码(通过阅读coffee脚本文档
..这就是我所做的:

// file name: phantomTest.js

var phantom = require('phantom');

phantom.create(function(ph) {
    ph.createPage(function(page) {
        page.open('http://www.google.com', function(status) {
            console.log('opened google?', status);
            var title = page.evaluate(function() {
                return document.title;
            });
            console.log('page title is ' + title);              
        });
    });
    ph.exit();
});

不幸的是,它不起作用!如果我跑步

node phantomTest.js

在外壳上,什么也没有发生..什么也没有返回,并且过程没有停止..任何想法?

更新:

我只是在phantomjs 常见问题中阅读了这篇文章:

问:为什么PhantomJS没有写为Node.js模块?

答:简短的答案:“没有人可以担任两个主人。”

更长的解释如下。

到目前为止,这样做在技术上非常具有挑战性。

每个Node.js模块本质上都是Node.js核心(即“主”)的“从属”。在当前状态下,PhantomJS(及其随附的WebKit)需要对所有内容(事件循环,网络堆栈和JavaScript执行)具有完全控制权(以同步方式)。

如果目的是直接在Node.js中运行的脚本中使用PhantomJS,则可以通过启动PhantomJS进程并与其进行交互来实现这种“松散绑定”。

嗯..这可能与它有关吗?但是整个图书馆就没有意义了!

更新2:

我在网上找到了执行相同操作的代码:

var phantom = require('phantom');
phantom.create(function(ph) {
  return ph.createPage(function(page) {
    return page.open("http://www.google.com", function(status) {
      console.log("opened google? ", status);
      return page.evaluate((function() {
        return document.title;
      }), function(result) {
        console.log('Page title is ' + result);
        return ph.exit();
      });
    });
  });
});

不幸的是,这也不起作用..相同的结果!


问题答案:

phantomjs-
node并不是phantomjs官方支持的npm软件包。相反,它通过创建使用websocket充当节点和幻象之间的IPC通道的Web服务器,在节点和幻象之间实现了“巧妙的桥梁”。我没有弥补:

因此,我们通过分解ExpressJS的实例,在子进程中打开Phantom并将其指向一个特殊的网页(将socket.io消息转换为alert()调用)来与PhantomJS进行通信。Phantom接听了那些alert()呼叫,然后您就可以开始了!

因此,如果phantomjs-node工作正常,不工作,无提示失败或出现异常失败,我不会感到惊讶。除了phantomjs-
node的作者之外,我也不会期望其他任何人能够对phantomjs-node进行故障排除。

原始问题的答案是phantomjs常见问题解答的答案:不。幻影和节点之间存在无法调和的差异。两者都希望完全控制基本的底层功能,例如事件循环,网络堆栈和JS执行,因此它们无法在同一过程中进行协作。



 类似资料:
  • 问题内容: 是否可以使用Node.js在服务器端使用jQuery选择器/ DOM操作? 问题答案: 似乎有一个重大更新,导致原来的答案不再起作用。我找到了这个答案,解释了现在如何使用。我已经在下面复制了相关代码。 注意:原始答案没有提及你还需要使用安装

  • 问题内容: 可以将node.js设置为识别代理(例如Fiddler)并通过代理路由所有ClientRequest吗? 我在Windows上使用节点,并且想要调试http请求,就像在浏览器中使用Fiddler for JavaScript一样。 请注意,我不是在尝试创建代理,也不是在尝试接收服务器收到的代理请求。我想路由通过代理发出的请求。我想像在浏览器中执行请求一样,使用Fiddler来检查请求和

  • 问题内容: 我正在通过GoDaddy设置SSL,以与AWS EC2上的node.js服务器一起使用。我一直无法启动它。 这是我尝试过的: 打算用于域:files.mysite.com 在服务器上,我运行: 然后,我得到CSR:vim files.mysite.csr 我从以下位置复制并粘贴: 最后还有一个空行,我使用rekey离开并粘贴到GoDaddy界面中。 然后,我下载godaddy密钥,该密

  • 我需要一些目前在JavaFX中找不到的功能。比如机器人或托盘图标。 我知道这些工具确实适用于JavaFx应用程序。但是可以使用它们吗?有什么需要我考虑的吗?

  • 在我的Eclipse RCP视图中,我使用JFace数据绑定将模型数据绑定到。我使用绑定数据,如代码片段所示,它工作得很好。 现在我真的想在节点上显示一个图像和文本。如果没有数据绑定,我只需要重写的方法,但是content+label provider方法和不能协同工作。我还没有在API中找到问题的解决方案。是否有一个解决方案,也许使用s?

  • 问题内容: 我查看了Google Cloud SQL的文档和各种搜索,但无法确定是否可以将SQLAlchemy与Google Cloud SQL一起使用,如果可以,则连接URI应该是什么。 我正在寻找使用Flask-SQLAlchemy扩展,并且需要这样的连接字符串: 我看到了Django示例,但看起来配置使用的样式与连接字符串不同。 https://developers.google.com/c