使用casperjs获取页面的所有链接

Use casperjs to get all links from a page

我需要使用 casperJS 和 phantomJS 来仅从 a href 属性和 img src 中获取以 http、https、[= 开头的链接22=] 或 ftps(我想这是应该使用的正则表达式:((http|https|ftp|ftps):\/\/[^"]+)"/g).

我实现了仅从 a 标签获取链接的代码,但我需要对其进行改进以从与正则表达式匹配的 img 标签获取链接...

var casper = require('casper').create();
var links;

function getLinks() {
    var links = document.querySelectorAll('img');
    return Array.prototype.map.call(links, function (e) {
        return e.getAttribute('src')
    });
}

casper.start('https://marvel.com');

casper.then(function () {
    links = this.evaluate(getLinks);
});

casper.run(function () {
    for(var i in links) {
        console.log(links[i]);
    }
    casper.done();
});

字符串提供 match 函数,您可以在其中评估正则表达式。它 returns 将匹配作为数组或 null 如果没有匹配。

casper.then(function(){
    var regex = /((http|https|ftp|ftps):\/\/[^"]+)"/g)/;
    var srcs = this.getElementsAttribute("img", "src").filter(function(src){
        return !!src.match(regex);
    });

    srcs.forEach(function(src){
        console.log(src);
    });
});

我觉得这个正则表达式不对,所以我会使用 var regex = /^(ht|f)tps?:\/\//;