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.log
在 evaluate()
中不起作用,因为它 运行 在网页 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"
]
我尝试这样做:但看起来行不通
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.log
在 evaluate()
中不起作用,因为它 运行 在网页 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"
]