Javascript phantomjs render_multi_url.js修改输出文件名
我正试图修改这个脚本:这样,输出文件将以它们所属的网页命名,而不是“rendermulti-1.png(等等)” 这是我试过的Javascript phantomjs render_multi_url.js修改输出文件名,javascript,phantomjs,webpage-screenshot,Javascript,Phantomjs,Webpage Screenshot,我正试图修改这个脚本:这样,输出文件将以它们所属的网页命名,而不是“rendermulti-1.png(等等)” 这是我试过的 // Render Multiple URLs to file var RenderUrlsToFile, arrayOfUrls, system; system = require("system"); /* Render given urls @param array of URLs to render @param callbackPerUrl Fu
// Render Multiple URLs to file
var RenderUrlsToFile, arrayOfUrls, system;
system = require("system");
/*
Render given urls
@param array of URLs to render
@param callbackPerUrl Function called after finishing each URL, including the last URL
@param callbackFinal Function called after finishing everything
*/
RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) {
var getFilename, next, page, retrieve, urlIndex, webpage, pagename ; //<--
urlIndex = 0;
webpage = require("webpage");
page = null;
// replace forward slashes with underscores //<--
pagename = arrayOfUrls[urlIndex].replace(/\//g,'_'); //<--
getFilename = function() {
// return "rendermulti-" + urlIndex + ".png"; //<--
return pagename + ".png"; //<--
};
next = function(status, url, file) {
page.close();
callbackPerUrl(status, url, file);
return retrieve();
};
retrieve = function() {
var url;
if (urls.length > 0) {
url = urls.shift();
urlIndex++;
page = webpage.create();
page.viewportSize = {
width: 800,
height: 600
};
page.settings.userAgent = "Phantom.js bot";
return page.open("http://" + url, function(status) {
var file;
file = getFilename();
if (status === "success") {
return window.setTimeout((function() {
page.render(file);
return next(status, url, file);
}), 200);
} else {
return next(status, url, file);
}
});
} else {
return callbackFinal();
}
};
return retrieve();
};
arrayOfUrls = null;
if (system.args.length > 1) {
arrayOfUrls = Array.prototype.slice.call(system.args, 1);
} else {
console.log("Usage: phantomjs render_multi_url.js [domain.name1, domain.name2, ...]");
arrayOfUrls = ["www.google.com", "www.bbc.co.uk", "www.phantomjs.org"];
}
RenderUrlsToFile(arrayOfUrls, (function(status, url, file) {
if (status !== "success") {
return console.log("Unable to render '" + url + "'");
} else {
return console.log("Rendered '" + url + "' at '" + file + "'");
}
}), function() {
return phantom.exit();
});
//将多个URL呈现到文件
var RenderUrlsToFile,arrayOfUrls,system;
系统=要求(“系统”);
/*
呈现给定的URL
@要呈现的URL的参数数组
@完成每个URL(包括最后一个URL)后调用的param callbackPerUrl函数
@完成所有操作后调用的param callbackFinal函数
*/
RenderUrlsToFile=函数(URL、callbackPerUrl、CallBacknal){
var getFilename,next,page,retrieve,urleindex,webpage,pagename;//有对url.shift()的调用
,因此使用arrayOfUrls
计算filname不是一个好方法
您是对的:“/”是无效字符,因此您必须将其替换为通用标记(如?,…)
Alos,因为page.open
已经包含url
,最好使用它来计算文件名
解决办法可以是:
// Render Multiple URLs to file
var RenderUrlsToFile, arrayOfUrls, system;
system = require("system");
/*
Render given urls
@param array of URLs to render
@param callbackPerUrl Function called after finishing each URL, including the last URL
@param callbackFinal Function called after finishing everything
*/
RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) {
var getFilename, next, page, retrieve, urlIndex, webpage, pagename ; //<--
urlIndex = 0;
webpage = require("webpage");
page = null;
getFilename = function(url) {
return url.replace(/\//g,'_')+ ".png"; //<--
};
next = function(status, url, file) {
page.close();
callbackPerUrl(status, url, file);
return retrieve();
};
retrieve = function() {
var url;
if (urls.length > 0) {
url = urls.shift();
urlIndex++;
page = webpage.create();
page.viewportSize = {
width: 800,
height: 600
};
page.settings.userAgent = "Phantom.js bot";
return page.open("http://" + url, function(status) {
var file;
file = getFilename(url);
if (status === "success") {
return window.setTimeout((function() {
page.render(file);
return next(status, url, file);
}), 200);
} else {
return next(status, url, file);
}
});
} else {
return callbackFinal();
}
};
return retrieve();
};
arrayOfUrls = null;
if (system.args.length > 1) {
arrayOfUrls = Array.prototype.slice.call(system.args, 1);
} else {
console.log("Usage: phantomjs render_multi_url.js [domain.name1, domain.name2, ...]");
arrayOfUrls = ["www.google.com", "www.bbc.co.uk", "www.phantomjs.org"];
}
RenderUrlsToFile(arrayOfUrls, (function(status, url, file) {
if (status !== "success") {
return console.log("Unable to render '" + url + "'");
} else {
return console.log("Rendered '" + url + "' at '" + file + "'");
}
}), function() {
return phantom.exit();
});
//将多个URL呈现到文件
var RenderUrlsToFile,arrayOfUrls,system;
系统=要求(“系统”);
/*
呈现给定的URL
@要呈现的URL的参数数组
@完成每个URL(包括最后一个URL)后调用的param callbackPerUrl函数
@完成所有操作后调用的param callbackFinal函数
*/
RenderUrlsToFile=函数(URL、callbackPerUrl、CallBacknal){
var getFilename,next,page,retrieve,urlIndex,webpage,pagename;//1){
arrayOfUrls=Array.prototype.slice.call(system.args,1);
}否则{
log(“用法:phantomjs render_multi_url.js[domain.name1,domain.name2,…]);
arrayOfUrls=[“www.google.com”、“www.bbc.co.uk”、“www.phantomjs.org];
}
RenderUrlsToFile(arrayOfUrls)(函数(状态、url、文件){
如果(状态!=“成功”){
返回console.log(“无法呈现“'+url+””);
}否则{
返回console.log(“呈现的”'+url+“'at'+file+””);
}
}),函数(){
返回phantom.exit();
});
是的,我想您可以修改这个方法
getFilename = function() {
return "rendermulti-" + urlIndex + ".png"; //<--
return pagename + ".png"; //<--
};
getFilename=function(){
return“rendermulti-”+urleindex+“.png”;//谢谢!一个完美的解决方案,足够的解释来指导我进一步学习。干杯!