1

我正在尝试从指定的网站上抓取信息。该站点首先使用身份验证,因此使用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/.. 世界的新手,需要一些帮助来启发我。

4

1 回答 1

0

由于数据是使用异步 ajax 填充的,我猜您的点击与节点内的实际 DOM 填充之间存在延迟。在检查节点内的内容之前稍等片刻怎么样。

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

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

于 2012-11-03T14:19:06.043 回答