gpt4 book ai didi

javascript - Phantomjs 进程间通信

转载 作者:行者123 更新时间:2023-11-29 09:52:12 26 4
gpt4 key购买 nike

我正在尝试实现一种解决方案,通过使用 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 通信方面表现出色。这就是为什么为了高级功能和更好的性能,我总是使用资源池模式 + 网络服务器模块。这个模块仍然被标记为 EXPERIMENTAL,但直到现在我一直觉得它很稳定。

因此,我认为在您的情况下最好通过 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=http://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 进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20751999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com