2017-09-12 4 views
1

나는 그와 함께 시도 :하지만casperjs : Howto는 텍스트가 포함 된 링크를 얻습니까?

function getLinks(containText) { 
    return casper.evaluate(function(containText) { 
     var links = document.querySelectorAll('a'); 
     return Array.prototype.map.call(links, function (e) { 
      var href = e.getAttribute('href'); 
      console.log(href); 
      if (href.indexOf(containText) !== -1) { 
       return href; 
      } 
     }); 
    }) 
} 
links = getLinks('intermediary'); 
require('utils').dump(links); 

작동하는 보이지 않는 또한 CONSOLE.LOG이 작동하지 않는 것 : 나는) (평가 돌며 것을 사용할 수 있습니까? 당신은이 웹 페이지의 DOM의 컨텍스트 내에서 실행되기 때문에 console.logevaluate() 내에서 작동하지 않습니다 올바른지

답변

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

function getLinks(containText) { 
    var links = document.querySelectorAll('a'); 
    return Array.prototype.map.call(links, function(e) { 
     return e.getAttribute('href'); 
    }).filter(function(e) { 
     return e.indexOf(containText) !== -1; 
    }); 
} 

casper.start('file:///tmp/test.html', function() { 
    var links = this.evaluate(getLinks, 'intermediary'); 
    require('utils').dump(links); 
}); 

casper.run(); 

: 여기 http://docs.casperjs.org/en/latest/modules/casper.html#casper-evaluate

는 필터링이 작동하는 것을 보여주기 위해 샘플 /tmp/test.html입니다 :

<html> 
    <head> 
    <title>test</title> 
    </head> 
    <body> 
    <p>Here are some example pages.</p> 
    <p><a href="intermediary">a link</a></p> 
    <p><a href="click">click</a></p> 
    <p><a href="this contains the string intermediary in it">other link</a></p> 
    <p><a href="this does not contain string">yet another link</a></p> 
    </body> 
</html> 

그리고 출력 :

[ 
    "intermediary", 
    "this contains the string intermediary in it" 
]