Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将PhantomJS作为服务器运行并远程调用它?_Javascript_Node.js_Seo_Phantomjs - Fatal编程技术网

Javascript 如何将PhantomJS作为服务器运行并远程调用它?

Javascript 如何将PhantomJS作为服务器运行并远程调用它?,javascript,node.js,seo,phantomjs,Javascript,Node.js,Seo,Phantomjs,这可能是一个非常基本的问题。我希望将无头浏览器PhantomJS作为服务器运行,而不是作为命令行工具运行 一旦它运行,我想通过HTTP远程调用它。我唯一需要的是发送一个URL并返回HTML输出。我需要它为AJAX应用程序生成HTML,使其可搜索 有可能吗?最简单的方法是制作一个python脚本或一些简单的东西来启动服务器并使用python WebSocket与之通信,使用排序的web表单查询网站并获取页面源。任何自动化都可以通过cron作业完成,或者如果您在Windows上,您可以使用任务功能自

这可能是一个非常基本的问题。我希望将无头浏览器
PhantomJS
作为服务器运行,而不是作为命令行工具运行

一旦它运行,我想通过HTTP远程调用它。我唯一需要的是发送一个URL并返回HTML输出。我需要它为AJAX应用程序生成HTML,使其可搜索


有可能吗?

最简单的方法是制作一个python脚本或一些简单的东西来启动服务器并使用python WebSocket与之通信,使用排序的web表单查询网站并获取页面源。任何自动化都可以通过cron作业完成,或者如果您在Windows上,您可以使用任务功能自动启动python脚本。

您可以将PhantomJS作为Web服务器运行,因为它具有。“示例”文件夹包含例如。它独立运行,没有任何依赖项(没有节点)

如果您想通过node.js运行PhantomJS,那么使用节点的PhantomJS桥也很容易做到这一点

var http = require('http');
var phantom = require('phantom');

phantom.create(function (ph) {
  ph.createPage(function (page) {
    http.createServer(function (req, res) {
      // TODO: parse `request` and determine where to go
      page.open(someURL, function (status) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        // TODO: do something on the page and generate `result`
        res.end(result);
      });
    }).listen(8080);
  });
});
笔记
只要不同时有多个请求,您就可以自由地使用它。如果这样做,则需要同步请求(因为只有一个
页面
对象),或者需要在每个请求上创建一个新的
页面
对象,并在完成后再次执行
关闭()

谢谢。对于我来说,重要的是不要为每个请求执行
phantom
。我需要幻影作为服务器运行。可能吗?是的。也许你以前没用过幻影?PhantomJS不像HTMLUnit那样是一个HTML解析器,而是一个基于Gecko(Firefox使用的后端)的无头浏览器。浏览器运行为一个单独的进程,然后由Python、java、C++等编写的API控制,然后可以轻松地将其转换成服务器端浏览器页面处理器单元。如果您使用WebSocket技术或生成一个可以提交请求的网页,然后python代码可以在单独的PhantomJS进程上执行这些请求,则可以远程控制。您是对的,我还没有使用PhantomJS。再次感谢您的解释。感谢您如此详细和深入的回复。伟大的解释卓越的答案,+1是一个全面的代码示例,它精确地显示了它的外观。
var http = require('http');
var phantom = require('phantom');

phantom.create(function (ph) {
  ph.createPage(function (page) {
    http.createServer(function (req, res) {
      // TODO: parse `request` and determine where to go
      page.open(someURL, function (status) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        // TODO: do something on the page and generate `result`
        res.end(result);
      });
    }).listen(8080);
  });
});