2013-08-22 2 views
1

사이트 스크래핑이 필요한 프로젝트에 JSDom을 사용할 것을 고려하고 있습니다.
아마존 페이지를 사용해 보았습니다. 다음은 샘플 코드는 다음과 같습니다jsdom 사용시 "DOMNodeInsertedIntoDocument 이벤트 전달 실패"오류가 발생했습니다.

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

즉, 오류를 효과적으로 테스트 할 수 없습니다. 단순히이 오류를 무시하면 안전하지 않습니다.

제안 사항? 아마존 관련 문제 일 수 있습니까? JSDom의 GitHub의 페이지 (link)에
제출 문제 :

업데이트 (그들은 자신의 페이지에 jQuery를 1.2.6을 사용하고 있습니다).

+0

정확히 같은 문제가 있습니다. 나는 [cheerio] (https://github.com/MatthewMueller/cheerio) + [요청] (https://github.com/mikeal/request) 대신에 사용했다. 매력처럼 일했습니다. – Xavi

답변

3

글쎄, 노드 인스펙터를 사용하는 디버그 세션 후에, 나는 아마존 페이지에서 그 오류를 던지는 코드 조각을 하나씩 관리 할 수 ​​있었다. 그것은 긴 인라인 <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> 

, 내가 JSDom이에 대한 예외를 발생 안 되더라도는 (A CSS 구문 오류라고 생각 그 다음) 나는 이것이 매우 합법적이라고 말하는 어떤 출처 (here's one)를 발견했다.

그래서 JSDom (see issue on Github)의 개발자에게 문제를 재현하는 코드와 함께 전체 통신문을 제공 한 후 버그로 선언되었으며 문제가 해결 될 예정입니다.