ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

javascript – Phantomjs进程间通信

2019-08-31 07:34:46  阅读:191  来源: 互联网

标签:javascript phantomjs pipe


我正在尝试实现一个解决方案,通过使用PhantomJS,Web位置被打开评估,输出被保存到文件进行处理.特别是扫描恶意脚本.我已经能够使用运行一次的PhantomJS来实现该解决方案.例如,这完美地工作……

var system = require('system');
var page = require('webpage').create();
var lastReceived = new Date().getTime();
var requestCount = 0;
var responseCount = 0;
var requestIds = [];
var fileSystem = require('fs');
var startTime = new Date().getTime();

page.onResourceReceived = function (response) {
    if(requestIds.indexOf(response.id) !== -1) {
        lastReceived = new Date().getTime();
        responseCount++;
        requestIds[requestIds.indexOf(response.id)] = null;
    }
};
page.onResourceRequested = function (request) {
    if(requestIds.indexOf(request.id) === -1) {
        requestIds.push(request.id);
        requestCount++;
    }
};

page.open('http://adserver.example.com/adserve/;ID=164857;size=300x250;setID=162909;type=iframe', function () {});

var checkComplete = function () {
    // We don't allow it to take longer than 5 seconds but
    // don't return until all requests are finished
    if((new Date().getTime() - lastReceived > 300 && requestCount === responseCount) || new Date().getTime() - startTime > 5000)  {
        clearInterval(checkCompleteInterval);
        console.log(page.content);
        phantom.exit();
    }
}

var checkCompleteInterval = setInterval(checkComplete, 1);

但是,我在创建和自动化系统时遇到了巨大的困难,不需要PhantomJS不断重启,这有很大的开销.
我尝试使用命名管道进行读取然后尝试打开传递的URL,但由于某种原因它无法正常打开.我很乐意并非常感谢任何关于此的指导.

解决方法:

值得一提的是,PhantomJS在HTTP通信方面表现优异.这就是为什么高级功能和性能更好,我总是使用资源池模式webserver模块.这个模块仍然被标记为实验,但直到现在我总是发现它非常稳定.

因此,我认为在您的情况下最好通过HTTP进行通信比通过文件IO进行通信更好.

这是一个非常基本的例子:

var page = require('webpage').create();
var server = require('webserver').create();
var system = require('system');
var host, port;

if (system.args.length !== 2) {
    console.log('Usage: server.js <some port>');
    phantom.exit(1);
} else {
    port = system.args[1];
    var listening = server.listen(port, function (request, response) {
        var page=require('webpage').create();
        page.open(request.post.target, function(status){
            response.write("Hello "+page.title);
            response.close();
        });
    });
    if (!listening) {
        console.log("could not create web server listening on port " + port);
        phantom.exit();
    }

    //test only
    var url = "http://localhost:" + port + "/";
    console.log("SENDING REQUEST TO:");
    console.log(url);
    var data='target=https://stackoverflow.com/';
    page.open(url,'post', data, function (status) {
        if (status !== 'success') {
            console.log('FAIL to load the address');
        } else {
            console.log("GOT REPLY FROM SERVER:");
            console.log(page.content);
        }
        phantom.exit();
    });
}

标签:javascript,phantomjs,pipe
来源: https://codeday.me/bug/20190831/1773998.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有