Javascript 使NodeJS/JSDom在抓取之前等待完全渲染
我正试图从我需要登录的网站上获取数据。不幸的是,使用JSDom/NodeJS得到的结果与使用web浏览器(如FF)得到的结果不同。特别是,我没有得到带有用户名、密码和提交按钮的登录表单 我了解Javascript的大部分内容,至少是异步的。然而,我认为JSDom的done函数会同步地等待页面的完整呈现。我想我要做的是模拟HTTPS get并等待完整的文档。准备就绪Javascript 使NodeJS/JSDom在抓取之前等待完全渲染,javascript,jquery,node.js,web-scraping,jsdom,Javascript,Jquery,Node.js,Web Scraping,Jsdom,我正试图从我需要登录的网站上获取数据。不幸的是,使用JSDom/NodeJS得到的结果与使用web浏览器(如FF)得到的结果不同。特别是,我没有得到带有用户名、密码和提交按钮的登录表单 我了解Javascript的大部分内容,至少是异步的。然而,我认为JSDom的done函数会同步地等待页面的完整呈现。我想我要做的是模拟HTTPS get并等待完整的文档。准备就绪 var jsdom = require("jsdom"); var jsdom_global = require("jsdom-gl
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在到达页面时不执行JS。在这种情况下,返回的元素只有服务器呈现的HTML 您可以尝试使用无头浏览器模块,如PhantomJS等,看看您的情况如何。在文章的底部有一部分是关于两者之间的区别