使用 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)。