使用 PhantomJS 测试 MP3
Testing an MP3 with PhantomJS
我想在 Phantom 中设置一个测试例程,扫描播客 RSS 提要,抓取 MP3 文件的 URL,然后测试它们是否存在。我有这个:
/* For checking one mp3 file */
function checkFile(url) {
var fs = require('fs');
if (fs.exists(url)) {
console.log('"'+url+'" exists.');
} else {
console.log('"'+url+'" doesn\'t exist.');
}
}
/* For checking the whole feed */
page.open('/path/to/rss/', function(status) {
if (status === 'fail') {
console.log(status);
} else {
var content = page.content;
parser = new DOMParser();
xmlDoc = parser.parseFromString(content,'text/xml');
var item = xmlDoc.getElementsByTagName('item');
console.log('Feed contains ' + item.length + ' items');
var enclosures = xmlDoc.getElementsByTagName('enclosure');
for(var i=0; i < enclosures.length; i++)
{
var enclosureAttributes = enclosures[i].attributes;
var url = enclosureAttributes.getNamedItem("url").value;
console.log('Checking: ' + url);
checkFile(url);
}
}
phantom.exit();
});
但是 fs.exists() 函数总是 returns 错误。 MP3 文件直接在浏览器中下载而不是播放,所以这可能就是问题所在。或者可能是时间不够。
fs模块顾名思义就是一个文件系统模块。你不能用它访问远程文件。
您将使用 page.open()
并查看传递到回调中的状态(它是异步的:不能在此处使用循环)。或者您可以在 page.evaluate()
中使用非异步 XMLHttpRequest
(如果文件在另一个域中,则必须使用 运行 PhantomJS 和 --web-security=false
)。
我想在 Phantom 中设置一个测试例程,扫描播客 RSS 提要,抓取 MP3 文件的 URL,然后测试它们是否存在。我有这个:
/* For checking one mp3 file */
function checkFile(url) {
var fs = require('fs');
if (fs.exists(url)) {
console.log('"'+url+'" exists.');
} else {
console.log('"'+url+'" doesn\'t exist.');
}
}
/* For checking the whole feed */
page.open('/path/to/rss/', function(status) {
if (status === 'fail') {
console.log(status);
} else {
var content = page.content;
parser = new DOMParser();
xmlDoc = parser.parseFromString(content,'text/xml');
var item = xmlDoc.getElementsByTagName('item');
console.log('Feed contains ' + item.length + ' items');
var enclosures = xmlDoc.getElementsByTagName('enclosure');
for(var i=0; i < enclosures.length; i++)
{
var enclosureAttributes = enclosures[i].attributes;
var url = enclosureAttributes.getNamedItem("url").value;
console.log('Checking: ' + url);
checkFile(url);
}
}
phantom.exit();
});
但是 fs.exists() 函数总是 returns 错误。 MP3 文件直接在浏览器中下载而不是播放,所以这可能就是问题所在。或者可能是时间不够。
fs模块顾名思义就是一个文件系统模块。你不能用它访问远程文件。
您将使用 page.open()
并查看传递到回调中的状态(它是异步的:不能在此处使用循环)。或者您可以在 page.evaluate()
中使用非异步 XMLHttpRequest
(如果文件在另一个域中,则必须使用 运行 PhantomJS 和 --web-security=false
)。