2016-06-22 46 views
0

我正在使用Phantomjs。我需要將某些信息傳遞到我們定位的網頁(http://localhost:4569/index.html)。這個想法是,一旦目標頁面加載,將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',我可以包含一個外部文件。有沒有什麼辦法可以傳遞一個JavaScript對象而不是注入文件?當用戶執行Phantomjs命令時,他也會傳遞一個Javascript對象,我需要注入到目標站點。投票尋求幫助。 – OpenStack

+0

@OpenStack也許看看[這個答案](http://stackoverflow.com/a/21472068/691711)如何將數據放入頁面。這樣你就不必保留一個單獨的文件。 – zero298

相關問題