phantomjs
  • webpage-rendering
  • 2013-05-31 3 views 29 likes 
    29

    우리 앱의 웹 샷을 만들 스크립트를 만들었습니다. 그것은 완벽하게 실행하고 나는 끊어진 URL로 이미지가 발생할 때까지 모든 괜찮 : 나는 영원히 반복되기 전에, 아래의 사용 육초 후 스크립트를 깰 관리해야phantomJS 웹 페이지 시간 초과

    "<img src='http://testserver.our.intranet/fetch/image/373e8fd2339696e2feeb680b765d626e' />" 
    

    .

    하지만, (AKADOM에서 화상을) 네트워크 요구를 무시하고, 화상없이 손가락을 만들 진행 할 수있다 (또는 주사 화상 누락 이미지!)

    var page = require('webpage').create(), 
        system = require('system'), 
        address, output, size; 
    
    if (system.args.length < 3 || system.args.length > 5) { 
        phantom.exit(1); 
    } else { 
        address = system.args[1]; 
        output = system.args[2]; 
        page.viewportSize = { width: 640, height: 640 }; 
        page.zoomFactor = 0.75; 
        page.clipRect = { top: 10, left: 0, width: 640, height: 490 }; 
        try{ 
         page.open(address, function (status) { 
          if (status !== 'success') { 
           console.log('Unable to load the address!'); 
           phantom.exit(); 
          } else { 
           window.setTimeout(function() { 
            page.render(output); 
            phantom.exit(); 
           }, 200); 
          } 
         });  
        } finally{ 
         setTimeout(function() { 
          console.log("Max execution time " + Math.round(6000) + " seconds exceeded"); 
          phantom.exit(1); 
         }, 6000); 
        } 
    } 
    
    +0

    이것은 훌륭한 질문입니다. 해결하기가 조금 더 어렵다는 점을 제외하면 비슷한 문제가 있습니다. 우리는 잘못 작성된 커스텀 자바 스크립트가있는 클라이언트의 웹 사이트를 가지고 있습니다. 웹킷이 멈추는 것 같습니다. 우리는 테스트하고 싶은 거대한 웹 사이트를 가지고 있지만, 클라이언트의 커스텀 j가 웹킷을 깨고 있다면 작동하지 않습니다. 타이머 obj 좋은 솔루션이지만 누군가가 diff 솔루션을 가지고 있는지 궁금합니다. ...? – cliffbarnes

    답변

    60

    PhantomJS 1.9는 새로운 설정 인 resourceTimeout을 도입했습니다.이 설정은 요청이 취소되기까지 걸리는 시간을 제어합니다. 이와 함께 요청이 시간 초과 될 경우/발생하는 onResourceTimeout 이벤트가 발생합니다.

    여기에 위의 내용을 모두 설명하는 코드는 다음과 같습니다

    var page = require('webpage').create(); 
    page.settings.resourceTimeout = 5000; // 5 seconds 
    page.onResourceTimeout = function(e) { 
        console.log(e.errorCode); // it'll probably be 408 
        console.log(e.errorString); // it'll probably be 'Network timeout on resource' 
        console.log(e.url);   // the url whose request timed out 
        phantom.exit(1); 
    }; 
    
    page.open('http://...', function (status) { 
    ... 
    } 
    

    불행하게도 이러한 옵션이 제대로 지금 설명되어 있습니다. GitHub discussionsPhantomJS source code을 통해 찾아야했습니다.

    +2

    resourceTimeout은 호출 된 phantomjs 프로세스를 종료해야합니다. 나 때문에, 그렇지 않아. phantomjs 프로세스는 무한정 정지됩니다. – Donato

    +0

    @Donato resourceTimeout은'page.onResourceTimeout'에서 처리 할 수있는 이벤트 만 생성한다고 생각합니다. – Scadge

    +1

    버전 1.9.8 이상에서는 resourceTimeout이 프로세스를 중단하므로 PDF가 손상되지만 프로세스가 중단되지 않습니다. 또한 page.onResourceTimeout = function (request)을 사용하여 어떤 리소스가 문제를 일으켰는지 기록합니다 ... – Gerfried

    관련 문제