JSDOM 在 HTTP 请求后停止运行 Javascript

问题描述

伙计们,这是我第一次尝试网络抓取,我正在使用 JSDom。我正在加载这个使用 Javascript 创建所有内容的 URL。

运行我的脚本时,我注意到重要的元素是空的,然后我决定调试这个网页的 Javascript。我发现其中一个脚本发送了一个 HTTP 请求,并在返回时创建了内容

我也知道这个脚本开始执行但没有完成,因为它在请求之前和回调中打印到控制台。我可以像在浏览器中看到的一样,在节点控制台中看到日志。

此 Javascript 代码发送一个 XMLHTTPRequest,获取结果并传递给填充 DOM 元素的回调函数。在发送请求和调用此回调之间,可能会发生其他一些事情。正在使用第三方库。

什么可能阻止我的脚本结束,我该如何调试?

我在 Ubuntu 20 上运行,Node 版本是 12.20.1,JSDom 版本是 16.4.0

我目前拥有的代码

const jsdom = require('jsdom');
const { JSDOM } = jsdom;
JSDOM.fromURL('http://the-SPA-im-trying-to-extract-data-from',{
                resources: 'usable',//tried other things as well
                runScripts: "dangerously",pretendToBeVisual: true,})
            .then(dom => {
                console.log(dom);
                setTimeout(() => {
                    console.log(dom.serialize());
                },2000)
            }).catch(err => {
                console.log("We have an error",err)
            })

@编辑 我还使用 NODE_DEBUG=request 执行了我的节点脚本,但我没有看到 javascript 应该请求的 URL。

我仍然不能 100% 确定是 XMLHTTPRequest 失败了,可能是其他一些 Web API 导致了这个问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)