2016-06-22 2 views
0

Phantomjs를 사용하고 있습니다. 특정 정보를 웹 페이지()에 전달해야합니다. 아이디어는 목표 페이지가로드 되 자마자 JSON 객체를 페이지 & 페이지로 전달하여 전역 적으로 액세스 가능한 변수로 설정합니다. window.data = {....}과 같은 것입니다. 이 변수가 설정되면 대상 페이지에서이 변수를 사용합니다. Phantomjs를 사용하여 원하는 결과를 얻을 수 있습니까? 당신이 이것을 촉진 할 수있을 것phantomjs를 사용하여 대상 웹 페이지에 값을 전달

var webPage = require('webpage'); 
var page = webPage.create(); 
var settings = { 
    operation: "POST", 
    encoding: "utf8", 
    headers: { 
    "Content-Type": "application/json" 
    }, 
    data: JSON.stringify({ 
    some: "data", 
    another: ["custom", "data"] 
    }) 
}; 

page.open('http://localhost:4569/index.html', settings, function(status) { 
    console.log('Status: ' + status); 
    // 
+0

? 삽입 된 데이터를 사용하기 위해 페이지 JS가 언제 실행됩니까? 로드 도중, 페이지로드 이후 또는 심지어 나중에 실행됩니까? –

답변

1

한 가지 방법은 setIntervalinjectJs()의 조합입니다. 몇 초마다 대상 페이지의 데이터를 확인합니다. 그런 다음 injectJs을 사용하여 데이터 조각을 삽입합니다. 그런 다음 주입 된 데이터를 소화하고 그에 따라 phantomjs 스크립트를 반응시킵니다.

index.html을

<html> 

<head> 
    <title>Phantest</title> 
</head> 

<body> 
    <main> 
     <h1>Phantom Test</h1> 
     <p>Test of phantom</p> 
    </main> 
    <script> 
     (function() { 
      console.log("Hello"); 
      setInterval(function() { 
       if (window.myVar) { 
        console.log("window.myVar is here!"); 
        console.log(window.myVar); 
       } 
      }, 1000); 
     }()); 
    </script> 
</body> 

</html> 

phan.js 데이터를 사용하는 방법

/*jslint node:true*/ 

"use strict"; 

var page = require("webpage").create(); 

page.onConsoleMessage = function (msg) { 
    console.log(msg); 
}; 

page.open("http://127.0.0.1:52987/index.html", function (status) { 
    if (status === "success") { 
     page.injectJs("inject.js"); 
    } 
}); 

inject.js

/*jslint browser:true devel:true*/ 
console.log("I'm from Phantom"); 

window.myVar = "I'm myVar!"; 
+0

빠른 답장을 보내 주셔서 감사합니다. 'injectJS'를 사용하는 것처럼 보입니다. 외부 파일을 포함시킬 수 있습니다. 파일을 삽입하는 대신 자바 스크립트 객체를 전달하는 방법이 있습니까? 사용자가 Phantomjs 명령을 실행하면 대상 사이트에 주입해야하는 Javascript 객체도 전달합니다. 도움을 요청하십시오. – OpenStack

+0

@OpenStack 어쩌면 어떻게 [이 대답] (http://stackoverflow.com/a/21472068/691711) 페이지에 데이터를 넣는 지 한번보세요. 그렇게하면 별도의 파일을 보관할 필요가 없습니다. – zero298

관련 문제