1

サイトのスクレイピングが必要なプロジェクトに JSDom を使用することを検討しています。
Amazonのページを試してみることから始めました。サンプルコードは次のとおりです。

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] } } ]

これは、エラーを効果的にテストできないことを意味します。このエラーを単に無視することは、私にとって安全ではないと感じています。

助言がありますか?これはAmazon関連の問題でしょうか?(彼らはページで jQuery 1.2.6 を使用しています)

更新:
JSDom github ページ (リンク) に問題を提出しました。

4

1 に答える 1

3

node-inspector を使用したデバッグ セッションの後、Amazon ページでそのエラーをスローするコードを特定することができました。これは長いインライン<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 は例外をスローすることは想定されていません)

そのため、JSDom の開発者と協議した後 ( Github の問題を参照して、問題を再現するコードと共にすべての通信を取得してください)、これはバグであると宣言されており、修正されることを願っています!

于 2013-09-30T16:18:37.907 に答える