我唯一得到的就是前面的<td>
将始终具有相同的(并且是文档中唯一的)内容:
<td>
<label>unique text<label>
</td>
<td>dynamic text</td>
我可以在浏览器控制台中轻松地使用jQuery抓取它(该页面加载了jQuery):
$("label:contains('unique text')").parent().next().text();
我已经有一段时间了,并尝试了我能想到的一切。
我最近的尝试是使用casperjs&#39;评估和:
casper.thenEvaluate(function addID() {
$("label:contains('unique text')").parent().next().attr('id', 'uniqueID');
});
casper.then(function getText() {
var target = this.getHTML('td#uniqueID');
this.echo(target);
});
这给了我:
CasperError:找不到元素匹配选择器:td#uniqueID
为什么我的casper.thenEvaluate
功能无法创建我正在寻找的td#uniqueID
?
如果我这样做this post's answer:
casper.then(function getText() {
this.evaluate(function addID() {
$("label:contains('unique text')").parent().next().attr('id', 'uniqueID');
});
var target = this.thenEvaluate(function returnText() {
return $('#uniqueID').text();
});
this.echo(target);
});
我得到一个[Object Casper]
,这听起来似乎就是这样。它充满了waitForContent
,scrollTo
等......
注意:上述代码块不正确(as was pointed out in this answer by Artjom B.)并更改为:
casper.then(function getText() {
this.evaluate(function addID() {
$("label:contains('unique text')").parent().next().attr('id', 'uniqueID');
});
var target = this.fetchText('#uniqueID');
this.echo(target);
});
问题仍然存在。请参阅下面的答案以获得解决方案。
答案 0 :(得分:2)
如果您已经在链接的答案中尝试过,为什么不复制它?您的错误是您在thenEvaluate
块中使用then
。 CasperJS分步工作,您安排了一个不必要的步骤。这创建了另一个稍后执行的步骤。
将thenEvaluate
更改为evaluate
,它应该可以正常工作。当你了解它时,你可以将两者结合起来:
casper.then(function getText() {
var target = this.evaluate(function addID() {
$("label:contains('unique text')").parent().next().attr('id', 'uniqueID');
return $('#uniqueID').text();
});
this.echo(target);
});
甚至
casper.then(function getText() {
this.evaluate(function addID() {
$("label:contains('unique text')").parent().next().attr('id', 'uniqueID');
});
var target = this.fetchText(#uniqueID);
this.echo(target);
});
答案 1 :(得分:0)
我终于解决了。当我在浏览器中访问该页面时,我点击一个链接,javascript通过ajax POST调用一个模态,其中包含我正在抓取的信息。我认为在casperjs中,当我使用时,它会以相同的方式工作:
casper.thenOpen('http://www.website.net/details.php', {
method: 'post',
data: {
'id': 'foo',
'key': 'bar',
}
});
看起来casper的呈现方式与我预期的略有不同。即使主页面加载了jQuery,模态也没有。所以我需要:
clientScripts: ["jquery-2.1.1.min.js"]
在我的内心:
var casper = require('casper').create({
});
以下是完整的参考脚本:
var url = "http://www.website.net/search.php?key=foobarfoobarfoobarfoobar";
var casper = require('casper').create({
clientScripts: ["jquery-2.1.1.min.js"]
});
casper.start(url, function() {
//some other unrelated stuff is going to go here
});
casper.thenOpen('http://www.website.net/details.php', {
method: 'post',
data: {
'id': 'foo',
'key': 'bar',
}
});
casper.then(function getText() {
this.evaluate(function addID() {
$("label:contains('unique text')").parent().next().attr('id', 'uniqueID');
});
var target = this.fetchText('#uniqueID');
this.echo(target);
});
casper.run();