微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JSDOM 在 HTTP 请求后停止运行 Javascript

如何解决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 举报,一经查实,本站将立刻删除。