Javascript 在PhantomJS中从站点上的Ajax请求获取状态代码

Javascript 在PhantomJS中从站点上的Ajax请求获取状态代码,javascript,node.js,phantomjs,Javascript,Node.js,Phantomjs,我们正在使用PhantomJS访问我们公司的内部网站并截图 该脚本基本上是PhantomJS的官方示例之一,添加了waitTime变量 () var page=require('webpage')。create(), 系统=要求(“系统”), 地址、输出、大小; //waitTime是等待kibana和加载数据的时间,单位为毫秒。 //如果您的PDF中的查询不完整,请增加此值。10秒似乎对我有用。 var waitTime=10*1000; if(system.args.length5){ lo

我们正在使用PhantomJS访问我们公司的内部网站并截图

该脚本基本上是PhantomJS的官方示例之一,添加了waitTime变量 ()

var page=require('webpage')。create(),
系统=要求(“系统”),
地址、输出、大小;
//waitTime是等待kibana和加载数据的时间,单位为毫秒。
//如果您的PDF中的查询不完整,请增加此值。10秒似乎对我有用。
var waitTime=10*1000;
if(system.args.length<3 | | system.args.length>5){
log('用法:rasterize.js URL文件名[paperwidth*paperheight | paperformat][zoom]);
log('paper(pdf输出)示例:“5in*7.5in”,“10cm*20cm”,“A4”,“Letter”);
log('image(png/jpg输出)示例:“1920px”整个页面,窗口宽度1920px');
控制台日志(“800px*600px”窗口,剪裁为800x600”);
幻影。出口(1);
}否则{
地址=system.args[1];
输出=系统参数[2];
//取消对以下行的注释以登录。用用户名和密码替换用户:pass。
//page.customHeaders={'Authorization':'Basic'+btoa('user:pass')};
page.viewportSize={宽度:1280,高度:720};
if(system.args.length>3&&system.args[2].substr(-4)=“.pdf”){
size=system.args[3]。拆分('*');
page.paperSize=size.length==2?{宽度:大小[0],高度:大小[1],边距:“0px'}
:{格式:system.args[3],方向:“纵向”,边距:“1cm”};
}否则如果(system.args.length>3&&system.args[3].substr(-2)=“px”){
size=system.args[3]。拆分('*');
如果(size.length==2){
pageWidth=parseInt(大小[0],10);
pageHeight=parseInt(大小[1],10);
page.viewportSize={width:pageWidth,height:pageHeight};
page.clipRect={top:0,left:0,width:pageWidth,height:pageHeight};
}否则{
console.log(“大小:”,system.args[3]);
pageWidth=parseInt(system.args[3],10);
pageHeight=parseInt(pageWidth*3/4,10);//这是一个很好的假设
console.log(“页面高度:”,页面高度);
page.viewportSize={width:pageWidth,height:pageHeight};
}
}
如果(system.args.length>4){
page.zoomFactor=system.args[4];
}
第页打开(地址、功能(状态){
如果(状态!=“成功”){
console.log('无法加载地址!');
phantom.exit();
}否则{
setTimeout(函数(){
页面渲染(输出);
phantom.exit();
},等候时间);
}
});
}
我们正在访问的网站正在运行一个JavaScript,它正在向数据库发出请求。但是,根据给定的查询,此请求可能需要很长时间(最多10分钟)

因此,我们要做的不是提供10分钟的静态等待时间,而是从被访问的网站上运行的JavaScript中提取状态代码,如果达到200,脚本应该采用“屏幕截图”

我们的问题是,我们不知道如何从网站本身获取信息。(我们如何才能克服使用的PhantomJS脚本和访问的网站之间的“桥梁”?

这就是我们的目的

您可以确定从URL触发屏幕截图的特定响应。我使用了一个简单的字符串匹配,但也可以使用正则表达式等

当然,如果您通过node.js中的一个可用网桥使用PhantomJS,这看起来会有所不同

var page = require('webpage').create(),
    system = require('system'),
    address, output, size;

//waitTime is how long to to wait for kibana and the data to load in millis.
//Increase this if your queries appear incomplete in your PDFs. 10s seems to work for me.
var waitTime = 10 * 1000;

if (system.args.length < 3 || system.args.length > 5) {
    console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
    console.log('  paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
    console.log('  image (png/jpg output) examples: "1920px" entire page, window width 1920px');
    console.log('                                   "800px*600px" window, clipped to 800x600');
    phantom.exit(1);
} else {
    address = system.args[1];
    output = system.args[2];
    // Uncomment the following line to login. Replace user:pass with your username and password.
    //page.customHeaders={'Authorization': 'Basic '+btoa('user:pass')};
    page.viewportSize = { width: 1280, height: 720 };
    if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {
        size = system.args[3].split('*');
        page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
                                           : { format: system.args[3], orientation: 'portrait', margin: '1cm' };
    } else if (system.args.length > 3 && system.args[3].substr(-2) === "px") {
        size = system.args[3].split('*');
        if (size.length === 2) {
            pageWidth = parseInt(size[0], 10);
            pageHeight = parseInt(size[1], 10);
            page.viewportSize = { width: pageWidth, height: pageHeight };
            page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight };
        } else {
            console.log("size:", system.args[3]);
            pageWidth = parseInt(system.args[3], 10);
            pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any
            console.log ("pageHeight:",pageHeight);
            page.viewportSize = { width: pageWidth, height: pageHeight };
        }
    }
    if (system.args.length > 4) {
        page.zoomFactor = system.args[4];
    }
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit();
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, waitTime);
        }
    });
}
page.onResourceReceived = function(response) {
    if (response.stage === "end" && response.url.indexOf("/longrunningrequest") !== -1) {
        setTimeout(function(){
            if ("200" === (""+response.status)) {
                page.render("screenshot_200.png");
            } else {
                page.render("screenshot_other.png");
            }
            phantom.exit();
        }, 1000);
    }
};
page.open(address);