gpt4 book ai didi

javascript - CasperJS 评估函数第二次不起作用

转载 作者:行者123 更新时间:2023-11-29 22:07:09 26 4
gpt4 key购买 nike

我对 casperjs 和 JavaScript 知之甚少,一直在尝试测试我们的新网站。在阅读了 casperjs 文档并编写了一些示例程序后,我对 evaluate() 函数有了一些了解。但是现在我陷入了一个奇怪的问题。我使用评估函数来查找网页内的所有链接。现在我正在尝试访问所有这些链接并从中获取一些信息。现在我的问题是,我第二次使用 evaluate() 函数时,它被跳过了。这是完全出乎意料的行为。请填写我遗漏的内容。我附上了用于重现问题的示例代码。

var BASE_URL = "http://www.google.com";
var links = [];
var divs = [];
var casper = require('casper').create({verbose: true,});

function getLinks() {
var links = document.querySelectorAll('h3.r a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href');
});
}

function getDivs(){
__util__.echo("get Divs Function");
var divs = document.getElementsByTagName('div');
return Array.prototype.map.call(divs, function(e) {
return e;
});
}

casper.start(BASE_URL, function() {
this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});

casper.then(function() {
links = this.evaluate(getLinks);
this.echo("links == " + links);
});

casper.waitForUrl(BASE_URL, function(){
this.echo(this.getCurrentUrl());
}, function(){}, 20000);

casper.then(function() {
this.echo("------------------")
divs = this.evaluate(getDivs);
this.echo("^^^^^^^^^^^^^^^^^^")
this.echo("divs == " + divs);
});

casper.run();

最佳答案

这行得通。您在函数 getDivs __utils__ 上缺少一个“s”。

var BASE_URL = "http://www.google.com";
var links = [];
var divs = [];
var casper = require('casper').create({verbose: true,});

function getLinks() {
var links = document.querySelectorAll('h3.r a');
return Array.prototype.map.call(links, function(e) {
return e.getAttribute('href');
});
}

function getDivs(){
__utils__.echo("get Divs Function");
var divs = document.getElementsByTagName("div");
return Array.prototype.map.call(divs, function(e) {
return e;
});
}

casper.start(BASE_URL, function() {
this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});

casper.then(function() {
links = this.evaluate(getLinks);
this.echo("links == " + links);
});

casper.waitForUrl(BASE_URL, function(){
this.echo(this.getCurrentUrl());
}, function(){}, 20000);

casper.then(function() {
this.echo("------------------");
divs = this.evaluate(getDivs);
this.echo("^^^^^^^^^^^^^^^^^^");
this.echo(JSON.stringify(divs));
});

casper.run();

关于javascript - CasperJS 评估函数第二次不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20344817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com