我正在使用CasperJS登录hasjob.co并从主页上抓取一些信息。
我完成了大部分工作,比如点击内容并使用jquery登录,但我仍然坚持实际提取我想要的标记值。
我使用下面的代码来做提取,它似乎提取了一些东西,但大多数是空的但是带有逗号
casper.waitForSelector(x('//*[@id="hg-networkbar-hasjob"]/a'), function(){
casper.click(x('//*[@id="hg-networkbar-hasjob"]/a'));
});
我们的ecoho的结果看起来像这样
- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
以下完整代码:
var links = [];
function getLinks() {
var links = document.querySelectorAll('.annotation bottom-right');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('value');
});
}
var casper = require('casper').create({
clientScripts: ['/Users/doddarliu/Desktop/jquery.min.js']
});
var x = require('casper').selectXPath;
casper.options.viewportSize = {width: 1600, height: 950};
phantom.cookiesEnabled = true;
var fs = require('fs');
var cookies= JSON.stringify(phantom.cookies);
fs.write('cookies.txt', cookies, 644);
casper.userAgent('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
casper.start('https://auth.hasgeek.com/login');
// casper.on("resource.error", function(msg, trace) {
// this.echo("Error: " + msg, "ERROR");
// });
// casper.then( function() {
// this.sendkeys('')
// });
casper.then( function() {
casper.capture('test.png');
});
casper.waitForSelector(x('//*[@id="main-content"]/div[2]/div[2]/p/a[2]'), function(){
casper.click(x('//*[@id="main-content"]/div[2]/div[2]/p/a[2]'));
});
casper.waitForSelector(x('//*[@id="Passwd"]'), function(){
this.thenEvaluate(function() {
$('#Email').val('username');
$('#Passwd').val('pass');
});
});
// casper.wait(5000);
casper.then( function() {
casper.click(x('//*[@id="signIn"]'));
});
casper.waitForSelector(x('//*[@id="hg-networkbar-hasjob"]/a'), function(){
casper.click(x('//*[@id="hg-networkbar-hasjob"]/a'));
});
casper.wait(5000);
casper.then( function() {
casper.capture('test2.png');
});
casper.then(function() {
// aggregate results for the 'casperjs' search
links = casper.getElementsAttribute('.annotation.bottom-right', 'value');
});
casper.run(function() {
// echo results in some pretty fashion
this.echo(' - ' + links.toString()).exit();
});
示例标记:
<span class="annotation bottom-right">Fashionhaat</span>
我想提取&#34; Fashionhaat&#34;
答案 0 :(得分:0)
您不想提取value
属性。您想获取元素的文本。 casper.getElementsInfo()
提供text
属性。您可以根据需要进行过滤:
links = casper.getElementsInfo('.annotation.bottom-right').map(function(e){
return e.text;
});