2012-01-01 3 views
6

Digikey가 웹 사이트를 변경했으며 현재 게시를 통해 onload라는 자바 스크립트가 있습니다. 이것은 나의 이전의 간단한 자바 HTML 코드 검색자를 죽였다. PhantomJS를 사용하여 HTML/텍스트를 저장하기 전에 javascript를 실행할 수 있습니다.PhantomJS 페이지 덤프 스크립트 문제

var page = new WebPage(), 
t, address; 


var fs = require('fs'); 

if (phantom.args.length === 0) { 

console.log('Usage: save.js <some URL>'); 
phantom.exit(); 
} else { 

address = encodeURI(phantom.args[0]); 
page.open(address, function (status) { 
    if (status !== 'success') { 
     console.log('FAIL to load the address'); 
    } else { 
     f = null; 
     var markup = page.content; 
     console.log(markup); 
     try { 
     f = fs.open('htmlcode.txt', "w"); 
     f.write(markup); 
     f.close();   
     } catch (e) { 
      console.log(e); 
     } 
    } 
    phantom.exit(); 

}); 

} 

이 코드는 대부분의 웹 페이지와 함께 작동하지만 실패 : 내 테스트 케이스입니다

http://search.digikey.com/scripts/dksearch/dksus.dll?keywords=S7072-ND

합니다. URL을 열지 못하고 PhantomJS가 충돌합니다. win32 정적 빌드 1.3 사용.

팁이 있습니까?

기본적으로 내가하고있는 것은 파일을 저장하기 전에 문서를 수정하는 페이지 렌더링과 스크립트와 경쟁하는 wget입니다.

답변

1

더러운 솔루션 ... 그리고 아직 phantomjs 사이트에 게시됩니다 ... 타임 아웃을 사용하는 것입니다. 2 초의 대기 시간을 포함하도록 코드를 수정했습니다. 이렇게하면 내용을 파일로 덤핑하기 전에 페이지를 2 초 동안로드 할 수 있습니다. 정확한 초를 필요로하거나 시간의 양이 크게 다를 경우이 솔루션은 아마도 당신을 위해 일하지 않을 것입니다.

var page = new WebPage(), 

t, address; 


var fs = require('fs'); 

if (phantom.args.length === 0) { 

console.log('Usage: save.js <some URL>'); 
phantom.exit(); 
} else { 

address = encodeURI(phantom.args[0]); 
page.open(address, function (status) { 
    if (status !== 'success') { 
     console.log('FAIL to load the address'); 
    } else { 
     window.setTimeout(function(){ 
      f = null; 
      var markup = page.content; 
      console.log(markup); 
      try { 
      f = fs.open('htmlcode.txt', "w"); 
      f.write(markup); 
      f.close();   
      } catch (e) { 
       console.log(e); 
      } 
     } 
     phantom.exit(); 
    },2000); 
}); 

} 
관련 문제