javascript - 抓取 ajax 加载内容中的值会导致白页

标签 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 毫秒超时,正在退出。”。有什么想法吗?

最佳答案

主要问题是 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(): invalid selector provided "//*[@id="WRchTxt0-3cb"]/h2[3]/span":Error: SYNTAX_ERR: DOM Exception 12

关于javascript - 抓取 ajax 加载内容中的值会导致白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27466716/

相关文章:

javascript - 通过单击父行激活复选框

php - php 搜索 instagram 图片时出现 parseError

ajax - 当对象改变其状态时触发 Ajax 事件

python - 我该如何解决; "TypeError: ' WikipediaItem'对象不支持项目分配”

python - 如何在python中抓取td标签内的链接

javascript - 我应该把这个条件放在哪里?

javascript - 如何使用 YUI3 按字母顺序对列表进行排序

javascript - 获取数据时无法动态添加行 javascript

javascript - Ajax,从单个js调用多个PHP函数

java - 在java中避免.CSV文件开头的逗号