Sla*_*off 2 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&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();
Run Code Online (Sandbox Code Playgroud)
目前这个时间超过5000毫秒而没有包装在waitFor中它只是打印两次相同的URL.
这应该是你正在寻找的.请注意,我移动firstUrl为全局变量; 这样,Casper.waitFor()就可以访问它了.
此外,使用this.evaluate()内部Casper.waitFor()是不必要的并且实际上禁止接收错误消息,因为在远程页面上既不存在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();
Run Code Online (Sandbox Code Playgroud)
这是我在运行上面的代码时得到的结果:
Woop!
http://www.guru.com/emp/search.aspx?keyword=#&&sort=Earnings&page=2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15535 次 |
| 最近记录: |