加载ajax的内容中的刮痧值会导致白页

时间:2014-12-14 05:47:54

标签: javascript ajax web-scraping phantomjs casperjs

我在尝试取消此网页的价格时遇到了麻烦: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毫秒已过期,退出。"。有什么想法吗?

1 个答案:

答案 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