node.js - 使用 jsdom 时出现 "Dispatching event ' DOMNodeInsertedIntoDocument' failed"错误

标签 node.js web-scraping jsdom

我正在考虑将 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 ) 上提交了问题。

最佳答案

嗯,在使用 Node 检查器进行调试 session 后,我成功地在亚马逊页面上找出了引发该错误的代码段。 这是一个长内联的 CSS 规则 <style>元素,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 以获得完整的通信,以及重现问题的代码),它已被声明为一个错误,并希望能够得到修复!

关于node.js - 使用 jsdom 时出现 "Dispatching event ' DOMNodeInsertedIntoDocument' failed"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18373562/

相关文章:

node.js - 在 Amazon AWS EC2 上托管 Web 应用程序

javascript - 如何将请求与异步模块一起使用

javascript - 'next' 中的 'middleware function' 参数在 Node.js 的 Express 中如何工作?

node.js - 如何保持 Karma 服务器运行,但仅在我手动告诉它之前才运行测试?

python - Scrapy 好像没有做 DFO

java - 如何网络抓取自动完成文本字段

python - 在 python 中抓取表

jquery - 在 Ubuntu 14.04 上通过 npm 安装 jsdom 的问题

javascript - 如何在 PyV8 中加载 Nodejs 模块?

node.js - jsdom hashchange事件