2013-09-06 6 views
3

내 phantomJS 스크립트에서 HTML 컨텐트를 긁어 내기 전에 Phantom에서 일부 변수를 설정하기위한 몇 가지 HTTP 요청을 만들고 싶습니다.PhantomJS의 HTTP 요청은 무엇입니까?

PhantomJS에서 HTTP 요청을 수행하는 올바른 방법은 무엇입니까? PageObject를 사용하여 웹 페이지 인 것처럼 처리해야합니까? 아니면 사용할 수있는 XHR 기능이 있습니까? 먼저 Json 데이터를 가져 오려고합니다.

+0

Phantom 스크립트에 매개 변수를 명령 줄 인수로 전달하는 것도 고려해 볼 수 있습니다. – Joe

답변

3

고려해야 할 몇 가지 옵션이 있습니다. 이를 달성하는 가장 쉬운 방법은 WebPage 모듈을 사용하고로드하려는 데이터가 포함 된 페이지의 URL을 연 다음 다른 웹 페이지 객체로 다른 페이지를 긁는 것입니다.

var webpage = require('webpage'); 
var page = webpage.create() 
page.open('<some url>', function(status) { 
    var option1 = page.evaluate(function() { ... }); 
    var option2 = page.evaluate(function() { ... }); 

    another = webpage.create(); 
    another.open('<another url>', function(status) { 
    another.evaluate(function(opt1, opt2) { 

     // you have access to opt1 and opt2 here 

    }, option1, option2); 
    }); 
    page.close(); 
}); 

그런 다음 '다른'페이지에서 option1 및 option2 변수에 액세스 할 수 있습니다.

다른 옵션은 위에서 언급 한 Joe와 같은 명령 줄 인수를 사용하는 것입니다. 변수에 대한 커맨드 라인 인자를 받아들이는 PhantomJS 코드를 작성하고 웹 요청을하는 Node.js/Python/Ruby 스크립트를 작성하여 구문 분석하고 PhantomJS 프로세스를 적절한 명령 행 인수로 생성 할 수 있습니다.

두 가지 모두 작동하지만 한 파일에 코드를 보관하려면 첫 번째 경로로 이동하십시오.

+1

웹 서버에서 스크립트를 생성하고 명령 줄을 통해 인수를 전달하지만 스크립트가 실행되는 동안 제어 서버를 자주 업데이트해야합니다. Phantom (이 작업의 요구 사항)과 반대되는 Slimer를 사용하고 있기 때문에 WebPage 객체를 사용하는 것이 훨씬 더 중요합니다. 노드 http 모듈을 사용할 수 없으므로 아마도 사용할 수있는 독립형 http 모듈이있을 것입니다. 아니면 어쩌면 말릴까요? – emkman

+0

[SlimerJS docs] (http://docs.slimerjs.org/current/)에서 명령 생성 및 버퍼 출력 (curl과 같은 Linux 명령을 실행해야하는)에 사용할 수있는 내용이 없습니다. . 웹 페이지 개체를 사용하여이 작업을 수행하는 것이 유일한 옵션 일 수 있다고 생각합니다. –

+0

아무 것도 찾지 못했기 때문에 웹 페이지 개체를 사용했습니다. Phantom 문서에는 외부 프로세스에 보내는 HTTP 요청을 사용하는 Inter Process Communcation이라는 섹션이 있기 때문에 이상합니다. http://phantomjs.org/inter-process-communication.html 불행히도 구체적인 예는 제시하지 않습니다. . 보고 주셔서 감사합니다. 어쩌면 기능 요청을 할 것입니다. – emkman

관련 문제