phantomjs render_multi_url.js修改输出文件名
phantomjs render_multi_url.js modify output filenames
我正在尝试修改此脚本:https://github.com/ariya/phantomjs/blob/master/examples/render_multi_url.js这样,输出文件将以它们的大写网页命名,而不是"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 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命名所有文件,并忽略"/"之后的任何内容。
我怀疑我犯了一些基本错误,可能与范围有关,但当我将新变量移动到getFileName函数中时,情况就坏了。
任何帮助都将不胜感激。
谢谢!
有对urls.shift()
的调用,所以用arrayOfUrls
计算域名不是一个好方法。
你是对的:"/"是一个无效字符,所以你必须用通用令牌(如?,…)替换它。
另外,因为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();
});
是的,我想你可以修改这个方法
getFilename = function() {
return "rendermulti-" + urlIndex + ".png"; //<--
return pagename + ".png"; //<--
};
以客户您的输出文件名。
PS。我想问一些人,你明白这个问题吗:如果你给这个js来渲染90个html文件,但大多数时候它不能全部渲染,我需要执行很多次才能完成所有90个文件。
我试图将我的html文件拆分成一个小数组,然后调用这个js进行渲染,但在这个js文件中,有一个exit
方法,它将退出我的进程。所以我无法循环所有这些小的html文件url数组来一次性完成它们。
相关文章:
- 在JavaScript中输出转义字符
- 在Safari执行javascript之前对其进行修改
- 如何在jQuery中将函数的输出分配给变量
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- Javascript,输出结果后页面不断刷新
- 为什么不是't此函数用于修改最终输出
- 修改此node.js代码以输出.wav而不是.mp4
- 修改输入中的数组,然后返回输出
- 使用 JavaScript 修改 BIRT 中的查询输出
- 编写脚本以输出修改后的 JavaScript
- Opencart - jQuery cart total update - 修改输出
- 捕获、修改并输出电子音频
- phantomjs render_multi_url.js修改输出文件名
- 构建,修改,输出Javascript数组
- 简单修改AJAX脚本,将返回的输出赋值,而不是打印到文本框中
- Ext JS 4.0修改视图不会修改浏览器中的输出.请帮助
- Grunt -修改输出文件名
- 使用jQuery动态修改提交表单上的输出警报内容
- 如何将不断变化的顺序输出修改为随机输出
- 为什么我得到错误的输出,当我修改以下Javascript对象代码