2013-05-09 3 views
0

아래 코드를 참조하십시오.
두 개의 웹 페이지를 캡처하고 싶습니다.
phantomjs를 사용하여이 코드를 실행 한 후 웹 페이지 (www.baidu.com)의 스크린 샷을 하나만 얻었습니다.
웹 페이지가 phantomjs 싱글 톤입니까? 하나의 가상 공간에서 두 개의 웹 페이지를 열 수 있습니까?phantomjs : 웹 페이지 싱글 톤입니까?

var webpage1 = require('webpage').create(); 
webpage1.onLoadFinished = function() { 
    webpage1.render('1.png'); 
} 
webpage1.open('http://www.google.com'); 

var webpage2 = require('webpage').create(); 
webpage2.onLoadFinished = function() { 
    webpage2.render('2.png'); 
} 
webpage2.open('http://www.baidu.com'); 

UPDATE :
당신은 내가 스크립트의 끝을 지연
을 @Cybermaxs 감사합니다, 그것을 작동합니다. 두 개의 스크린 샷이 있습니다.

var webpage1 = require('webpage').create(); 
webpage1.onLoadFinished = function() { 
    webpage1.render('1.png'); 
} 
webpage1.open('http://www.google.com.cn'); 

var webpage2 = require('webpage').create(); 
webpage2.onLoadFinished = function() { 
    webpage2.render('2.png'); 
} 
webpage2.open('http://www.baidu.com'); 

setTimeout(function() { 
    console.log(webpage1.url); 
    console.log(webpage2.url); 
    phantom.exit(0); 
}, 9000); 

답변

1

문제는 PhantomJS가 자연에 의해 비동기 적이라는 것입니다.

는이 문제를 해결하는 방법에는 여러 가지가 있습니다 전에 스크립트가 종료됩니다 :

지연 스크립트

setTimeout(function() 
{ 
    phantom.exit(0); 
},5000); 

사용 waitFor example의 끝이 모든 스크린 샷을 기다리는이

재귀 접근 방식 사용

var webpage = require('webpage').create(); 

webpage.open('http://www.google.com', function(status) 
{ 
if (status !== 'success') { 
      console.log('FAIL to load the address'); 
     } else 
     { 
      webpage.render('1.png'); 
      webpage.open('http://www.baidu.com',function(status) 
      { 
      if (status !== 'success') { 
         console.log('FAIL to load the address'); 
        } else 
        { 
         webpage.render('2.png'); 
        } 
        phantom.exit(0); 
      }); 
     } 
     } 
); 

확실하게 두 페이지를 동시에 열 수 있습니다.

+0

감사합니다. 스크립트의 끝 부분을 지연 시키므로 작동합니다. 나는 내 질문을 업데이트했다. – hellojinjie

+0

그러나 나는 아직도 혼란 스럽다. 필자의 원저자 스크립트에서는 phantom.exit()를 호출하지 않았으므로 phantomjs는 스크립트가 끝날 때 종료되지 않으므로 phantomjs는 contiune을 실행하고 첫 번째 웹 페이지의 스크린 샷을 가져와야합니다. 두 번째 웹 페이지뿐만 아니라 – hellojinjie

관련 문제