Javascript 使NodeJS/JSDom在抓取之前等待完全渲染

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

我正试图从我需要登录的网站上获取数据。不幸的是,使用JSDom/NodeJS得到的结果与使用web浏览器(如FF)得到的结果不同。特别是,我没有得到带有用户名、密码和提交按钮的登录表单

我了解Javascript的大部分内容,至少是异步的。然而,我认为JSDom的done函数会同步地等待页面的完整呈现。我想我要做的是模拟HTTPS get并等待完整的文档。准备就绪

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等,看看您的情况如何。在文章的底部有一部分是关于两者之间的区别