2017-09-12 13 views
1

私はそれを試してみてください。しかしcasperjs:テキストを含むリンクを取得するには?

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" 
] 
関連する問題