使用node.js处理ajax响应

时间:2012-11-02 10:11:58

标签: ajax node.js asp.net-ajax zombie.js

我正在尝试从指定的网站上抓取信息。这个站点首先使用身份验证,因此我使用zombie.js:

var Browser = require("zombie");
var browser = new Browser();
browser.visit("https://*****login.aspx", function(){
    browser.fill('#user', '*****');
    browser.fill('#pwd', '*****');
    var button = browser.querySelector('#btnSubmit');
    browser.fire('click', button, function(){
    //scraping main.aspx
    });
});

它正在工作,我可以抓住main.aspx:有一个<table>,包含有关新邮件的信息(来自,日期,主题),问题来自:主题字段是可点击的,然后单击在它上面会出现一个带有实际消息的新窗口。然而,它是一个ajaxgrid,当我执行点击时:

var field = browser.querySelector('#VeryLongIdOfTheField');
browser.fire('click', field, function(){    
    console.log(browser.querySelector('#VeryLongIdOfTheFieldContainingTheMessage').innerHTML);
});

它返回一条错误消息,说undefined没有innerHTML。我想它是因为这个动作是用一些ajax魔法处理的。我是这个js / nodejs / jquery / ..世界的新手,需要一些帮助来激励我。

1 个答案:

答案 0 :(得分:0)

由于数据是使用async ajax填充的,我猜你的点击与节点内的实际DOM数量之间存在滞后。如何在检查节点内的内容之前等待一段时间。

browser.fire('click', field, function(){
  setTimeout(function(){
    console.log(browser.querySelector('#VeryLongIdOfTheFieldContainingTheMessage').innerHTML);
  }, 3000)
});

如果所花费的时间不是很可预测,您也可以在循环内运行它,直到找到内容或在经过合理的重试次数后退出。