我在尝试取消此网页的价格时遇到了麻烦:http://www.voyages-bateau.com
看起来很简单,但我尝试的任何抓取服务/工具似乎都适用于此页面。它的内容是通过ajax加载的,价格随后会带动画。我试试了wait()
和waitFor()
助手,但没有运气......
这是我用来取这个坏孩子的代码:
var casper = require('casper').create({
verbose: true,
logLevel: "debug"
});
casper.start('http://voyages-bateau.com', function() {
console.log(this.getHTML()); // no content loaded yet
});
casper.waitForSelector('//*[@id="WRchTxt0-3cb"]/h2[3]/span', function() {
var res = this.getHTML();
this.echo(res);
});
casper.run();
我得到的只是错误:"等待超时5000毫秒已过期,退出。"。有什么想法吗?
答案 0 :(得分:1)
主要问题是PhantomJS 1.x不支持Function.prototype.bind
。解决方法可以在这里找到:CasperJS bind issue。因为没有JavaScript运行,因为存在页面错误而你什么也看不见,因为它是一个JS驱动的页面。
您可以通过注册page.error
事件来验证这一点:
casper.on("page.error", function(pageErr){
this.echo("page.err: " + JSON.stringify(pageErr));
});
这会产生这个
page.err: "TypeError: 'undefined' is not a function (evaluating 'b.bind(a)')"
page.err: "TypeError: 'undefined' is not a function (evaluating 'c.bind(null,\"margin\")')"
page.err: "TypeError: 'undefined' is not a function (evaluating 'RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\\d_.\\-]*$/)')"
否则不会弹出调试输出或启用详细信息。
另一个问题是您忘记将XPath实用程序用于XPath:
var x = require('casper').selectXPath;
在顶部和后面的某处:
casper.waitForSelector(x('//*[@id="WRchTxt0-3cb"]/h2[3]/span'), function() {
var res = this.getHTML();
this.echo(res);
});
没有XPath实用程序,它会尝试将其解释为CSS选择器。由于你有verbose: true
,你必须看到
[error] [remote] findAll():提供的选择器无效" // * [@ id =" WRchTxt0-3cb"] / h2 [3] / span":错误:SYNTAX_ERR:DOM异常12