Javascript Casperjs点击法

Javascript Casperjs点击法,javascript,web-scraping,casperjs,Javascript,Web Scraping,Casperjs,一般来说,我对casperjs和javascript非常陌生,但我在其他领域有相当丰富的编码经验。目前,我试图运行的代码只是去一个网站,点击一个链接,这应该很简单,但我遇到了麻烦 var casper = require('casper').create(); var x = require('casper').selectXPath; casper.start('http://www.guru.com/emp/search.aspx?keyword=#&&page=1&

一般来说,我对casperjs和javascript非常陌生,但我在其他领域有相当丰富的编码经验。目前,我试图运行的代码只是去一个网站,点击一个链接,这应该很简单,但我遇到了麻烦

var casper = require('casper').create();
var x = require('casper').selectXPath;

casper.start('http://www.guru.com/emp/search.aspx?keyword=#&&page=1&sort=Earnings');

casper.then(function() {
    this.test.assertExists({
        type: 'xpath',
        path: '//*[@class="paddingLeft5 txt11px txt666"]/a[text()="Next"]'
    }, "Got Here");
});

casper.then(function() {
    var firstUrl = this.getCurrentUrl()
});

casper.thenClick(x('//*[@class="paddingLeft5 txt11px txt666"]/a[text()="Next"]'), function() {
    console.log("Woop!");
});

casper.waitFor(function check() {
    return this.evaluate(function() {
        return this.getCurrentUrl() != firstUrl;
    });
}, function then() {
    console.log(this.getCurrentUrl());
});


casper.run();

目前,在5000毫秒后,如果不在waitFor中进行包装,它只需打印两次相同的url。

看起来像是一个严重依赖JavaScript进行导航的网站


在处理下一步之前,您可能应该尝试更改url。

这应该是您要查找的内容。 注意,我将
firstUrl
移动为一个全局变量;这样,
Casper.waitFor()
就可以访问它

另外,在
Casper.waitFor()
中使用
this.evaluate()
是不必要的,实际上禁止接收错误消息,因为远程页面上既不存在
this
也不存在
firstUrl
。这是因为您希望在
Casper.evaluate()
中访问的任何变量都必须作为函数后的参数传递

var casper = require('casper').create();
var x = require('casper').selectXPath;
var firstUrl;
casper.start('http://www.guru.com/emp/search.aspx?keyword=#&&page=1&sort=Earnings');

casper.then(function() {
    this.test.assertExists({
        type: 'xpath',
        path: '//*[@class="paddingLeft5 txt11px txt666"]/a[text()="Next"]'
    }, "Got Here");
});

casper.then(function() {
    firstUrl = this.getCurrentUrl()
});

casper.thenClick(x('//*[@class="paddingLeft5 txt11px txt666"]/a[text()="Next"]'), function() {
    console.log("Woop!");
});

casper.waitFor(function check() {
    return this.getCurrentUrl() != firstUrl;
}, function then() {
    console.log(this.getCurrentUrl());
});


casper.run();
这是我在运行上述代码时得到的结果:

Woop!
http://www.guru.com/emp/search.aspx?keyword=#&&sort=Earnings&page=2

尝试了你的建议,结果请求超时了。我更新了这个问题,不过如果你还有什么建议要提的话。太棒了,真管用!非常感谢。不知道如何在evaluate中包装我的函数。