2016-10-21 1 views
0

je dois utiliser casperJS et PhantomJS pour obtenir uniquement les liens à la fois ahref attribut et imgsrc qui commencent par http, https, ftp ou FTPS (je suppose que c'est le regex qui devrait être utilisé. ((http|https|ftp|ftps):\/\/[^"]+)"/g)Utilisez casperjs pour obtenir tous les liens d'une page

I mis en œuvre le code qui obtient les liens que des a balises, mais je dois améliorer pour obtenir aussi les liens de img balises qui correspondent à l'expression rationnelle ...

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(); 
}); 
+0

Je ne sais pas casperjs, mais votre regex semble bon. Je viens d'ajouter une note rapide: vous pouvez compacter 'http | https | ftp | ftps' en' https? | Ftps? '. – antoni

Répondre

0

Une chaîne fournit le match fonction où vous pouvez évaluer une expression régulière contre. Il renvoie les correspondances sous forme de tableau ou null s'il n'y a pas de correspondance.

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); 
    }); 
}); 

Ce regex ne semble pas juste à mes yeux, donc j'utiliser var regex = /^(ht|f)tps?:\/\//;

+1

C'est exactement ce que je cherchais, merci! Pouvez-vous s'il vous plaît jeter un oeil à cette question http://stackoverflow.com/questions/40171792/generate-har-file-from-array-of-links-using-phantomjs? J'ai besoin de générer plusieurs fichiers har pour chaque lien d'un tableau et j'ai vraiment besoin d'aide pour cela ... – Valip

+0

Pavel, s'il vous plaît ne pas mendier comme ça. J'ai vu votre question et je ne vois pas pourquoi vous ne pouvez pas utiliser la suggestion de Vaviloff de la question en double. Ça devrait être facile. Vous ne l'avez pas encore essayé. –