【问题标题】:Getting "Dispatching event 'DOMNodeInsertedIntoDocument' failed" error when using jsdom使用 jsdom 时出现“调度事件 'DOMNodeInsertedIntoDocument' 失败”错误
【发布时间】:2013-08-22 06:52:53
【问题描述】:

我正在考虑将 JSDom 用于需要抓取网站的项目。
我首先尝试了一个亚马逊页面。这是一个示例代码:

jsdom.env(url, ["http://code.jquery.com/jquery.js"], function(errors, window) {
    console.log(errors);
    var $ = window.$,
        results = parseResultsPage($);
    //do some stuff
    window.close();
});

起初,我有一个if(errors.length > 0) ... 子句,但事实证明,errors 总是满的。即使刮擦本身有效,并且我得到了我需要的所有结果,我总是得到:

[ { type: 'error',
    message: 'Dispatching event \'DOMNodeInsertedIntoDocument\' failed',
    data: { error: [Object], event: [Object] } } ]

这意味着我无法有效地测试错误。简单地忽略这个错误对我来说是不安全的。

有什么建议吗?这可能是与亚马逊相关的问题吗? (他们在他们的页面上使用 jQuery 1.2.6)

更新
在 JSDom github 页面 (link) 上提交问题。

【问题讨论】:

  • 遇到了完全相同的问题。我最终改用cheerio + request。像魅力一样工作。

标签: node.js web-scraping jsdom


【解决方案1】:

好吧,在使用节点检查器进行调试会话之后,我设法在亚马逊页面上挑出了引发该错误的一段代码。 这是一个长内联 <style> 元素内的 CSS 规则,JSDom 不知道如何处理:

<style type="text/css">
...
.cust-rec-aui-button @-moz-document url-prefix(){
    .cust-rec-aui-button .a-button .a-button-text{
        line-height:29px
    }

    .cust-rec-aui-button .a-button.a-button-small .a-button-text{
        line-height:21px
    }

}
...
</style>

起初,我认为这是一个 CSS 语法错误(尽管 JSDom 不应该为此抛出异常),但后来我发现一些来源 (here's one) 说这是完全合法的。

因此,在与 JSDom 的开发人员协商后(see issue on Github 获得了整个通信,以及重现问题的代码),它已被宣布为一个错误,希望能得到修复!

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多