我正在尝试从需要登录的网站上抓取数据。不幸的是,与使用FF之类的Web浏览器相比,使用JSm / NodeJS获得的结果有所不同。特别是,我没有使用用户名,密码和提交按钮登录表单。
我了解Javascript至少是异步的。但是,我认为JSm的“完成”功能会同步等待页面的完整呈现。我想我想做的是模拟HTTPS获取并等待完整的document.ready完成。
var jsdom = require("jsdom");
var jsdom_global = require("jsdom-global");
var fs = require("fs");
var jquery = fs.readFileSync("./jquery-3.1.1.min.js", "utf-8");
jsdom.env({
url: "https://wemc.smarthub.coop/Login.html#login:",
src: [jquery],
done: function (err, window) {
var $ = window.$;
if($("button#LoginSubmitButton").length) {
console.log('Click button found');
} else {
console.log('Click button not found');
}
// The following text boxes are not coming back:
// $("input#LoginUsernameTextBox")
// $("input#LoginPasswordTextBox")
// If I enable the line below, I see a lot less than I would if I
// do a view source in any reasonable browser.
//console.log($("body").html());
}
});
最佳答案
通常,发生这种情况是因为JSDOM到达页面时,它不会执行JSDOM。在这种情况下,返回的唯一元素将是服务器呈现的HTML。
您可以尝试使用无头浏览器模块(例如PhantomJS等),然后看看效果如何。在JSDOM github page.的底部有一个关于两者之间区别的部分
关于javascript - 使NodeJS/JSm等待完整渲染后再进行抓取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41526729/