casperjs:如何获取包含文本的链接?

casperjs: Howto get links that contain text?

我尝试这样做:但看起来行不通

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 似乎不起作用:我可以在 evaluate() 中使用它吗?

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

你说得对,console.logevaluate() 中不起作用,因为它 运行 在网页 DOM 的上下文中: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"
]