我正在尝试从指定的网站上抓取信息。这个站点首先使用身份验证,因此我使用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 / ..世界的新手,需要一些帮助来激励我。
答案 0 :(得分:0)
由于数据是使用async ajax填充的,我猜你的点击与节点内的实际DOM数量之间存在滞后。如何在检查节点内的内容之前等待一段时间。
browser.fire('click', field, function(){
setTimeout(function(){
console.log(browser.querySelector('#VeryLongIdOfTheFieldContainingTheMessage').innerHTML);
}, 3000)
});
如果所花费的时间不是很可预测,您也可以在循环内运行它,直到找到内容或在经过合理的重试次数后退出。