2013-02-26 2 views
1

phantomjs로 페이지 내용을 가져 오려고합니다. 공식 사이트 (예 : https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js)의 많은 예제에서 page.open() 함수가 사용됩니다.
내 스크립트에서는 작동하지 않는 것 같습니다. 리플렉션을 사용하여 페이지 객체의 정의 된 모든 메소드를 살펴 보았습니다.phantomjs page.open()이 존재하지 않는 것 같습니다.

for (var prop in page) { 
     if (typeof page[prop] == 'function') { 
      log("method in page: " + prop); 
     } 
    } 

open() 메소드가 표시되지 않았습니다. 나는 스크립트를 실행하려고 할 때 또한
을 (close()를, 표시 ... 등) DID (렌더링) : 열림 기능을 실행하지 않습니다

// include plugins 
var system = require('system'); 
var fileSystem = require('fs'); 
var page = require('webpage').create(); 

// global errorhandler 
phantom.onError = function(msg, trace) { 
    console.log("ERROR!!!!! \n" + msg); 
    phantom.exit(1); 
}; 

// read json input and remove single outer quotes if set 
var jsonin = system.args[1]; 
if (jsonin.charAt(0) == "'") { 
    jsonin = jsonin.substr(1, jsonin.length - 2); 
} 
// make object of json 
var data = eval('(' + jsonin + ')'); 
// optional url 
var url = system.args[2]; 
// transfer file 
var dest = system.args[3]; 

console.log("systemargs[1]: data -> " + data); 
console.log("systemargs[2]: url -> " + url); 
console.log("systemargs[3]: dest -> " + dest); 

openRoot(); 

/* 
* open site 
*/ 
function openRoot() {  
    page.onConsoleMessage = function(msg) { 
    console.log('INNER ' + msg); 
    }; 

    page.open(url, function(status) { 
    if (status === "success") { 
     if (loadCount == 0) { // only initial open 
     console.log("opened successfully."); 
     page.injectJs("./jquery-1.8.3.min.js"); 
     } else { 
     console.log("page open error."); 
     console.log('skip refresh ' + loadCount); 
     } 

    } else { 
     console.log("error opening: " + status); 
    } 
    }); 
} 
phantom.exit(0); 

. 로그에는 open() 메소드 내부에 메시지가 표시되지 않습니다.

내가 잘못했을 수있는 것에 대한 조언은 크게 감사하겠습니다. 추가 정보가 필요하면 알려주십시오. 내가 open하지 않는 로그에 쓴 방법의 이전 목록 제공, 무엇을 기대하지 function :
안부,
알렉스

편집 :
라인

console.log(typeof (page.open)); 

출력 있다. 흠.

답변

1

무의미한 검색을 한 후 실수를 발견했습니다. 바보 야. 대본 끝 부분에서 phantom.exit()으로 전화해야합니다.

작업 코드에는 개체 (내 경우 content)와 그 구성원 인 content.isFinished을 검사하는 간격이 포함됩니다. 이 값을 true로 설정하면 phantom.exit()이 호출됩니다.
내 잘못, 절대적으로 내 잘못.
작업 코드 :

var url = system.args[2]; 
// transfer file 
var dest = system.args[3]; 

content = new Object(); 
content.isFinished = false; 

console.log("systemargs[1]: data -> " + data); 
console.log("systemargs[2]: url -> " + url); 
console.log("systemargs[3]: dest -> " + dest); 

openRoot(); 

/* 
* open site 
*/ 
function openRoot() {  
    page.onConsoleMessage = function(msg) { 
    console.log('INNER ' + msg); 
    }; 

    page.open(url, function(status) { 
    if (status === "success") { 
     if (loadCount == 0) { // only initial open 
     console.log("opened successfully."); 
     page.injectJs("./jquery-1.8.3.min.js"); 

     // do stuff 
     content.isFinished = true; 
     } else { 
     console.log("page open error."); 
     console.log('skip refresh ' + loadCount); 
     content.isFinished = true 
     } 

    } else { 
     console.log("error opening: " + status); 
    } 
    }); 
} 

/* 
* wait for completion 
*/ 
var interval = setInterval(function() { 
    if (content.isFinished) { 
    page.close(); 

    f = fileSystem.open(dest, "w"); 
    f.writeLine(out); 
    f.close(); 

    // exit phantom 
    phantom.exit(); 
    } else { 
    console.log('not finished - wait.'); 
    } 
}, 5000); 

감사합니다,
알렉스

관련 문제