我最近買了到目前使用我的第一個開發者的工作PhantomJS PhantomJS。PhantomJS網頁抓取Cisco交換機Web界面
我已責成給網絡刮網絡切換信息(主機名,的productID,ip地址,MAC地址等)從通過LAN電纜連接到PC的舊思科催化劑2960 x開關。
我得到的HTTP authenticatiion做工精細用phantomJS無頭的瀏覽器,可以打開第一開關頁面,但下面的圖片中看到它導致啓動頁面。 cisco switch startup report
此啓動頁面僅在用戶必須單擊具有下面顯示的表單按鈕輸入屬性的繼續按鈕後纔會首次登錄/訪問交換機。 (用AJAX寫的)
<form METHOD="GET">
<input type="button" name="button1" value="Continue"
onclick="setcookiesandLoadCiscoDeviceManager()"></form>
通常在Chrome瀏覽器上,我們點擊它並繼續前進。隨後給我們帶來了一個利益的主要頁面,包含交換機信息思科設備管理器頁面。(不允許張貼圖片,但它是可用的phantomjs小組討論頁)
我的問題是,旁路使用PhantomJS無頭瀏覽器的啓動報告是什麼是最好的方法?無論是...在表單提交方法
- 模擬按下按鈕GET上述觸發鏈接,進入到下一個頁面($阿賈克斯()想到)或...
- 調用函數setcookiesandLoadCiscoDeviceManager()通過.js文件(更多關於後者)。這更像是一種黑客攻擊手段。
開關網頁的體系結構概述here
當URL 10.44.39.252是第一請求3 FRAME SRC被調用。我通過phantomjs回調
page.onNavigationRequested
- Frmwrkresource.htm
- topbannernofpv.shtml
- setup_report.htm
輸入 「Button1的」 setup_report.htm框架內部存在知道這一點。當「Button1的」按下
setscookiesandLoadsCiscoDeviceManager();
僅在所有被稱爲startup_report和Cisco設備管理器(10.44.39.252/xhome之間過渡的JavaScript資源之間preflight.js稱爲
此函數調用存在熱媒)。我在想瀏覽器cookies是這個問題的主要部分。附
是我的源代碼。這是各級completeion
var page = require('webpage').create();
var fs = require('fs');
console.log("\n:Welcome to my Crawler Scrapper:");
var url = 'http://10.44.39.252/';
page.settings.userName='star';
page.settings.password='----------';
page.customHeaders={'Authorization': 'Basic '+btoa('star:xzsawq4321')};
page.settings.userAgent = 'PMG Web Crawler Bot/1.0';
page.onNavigationRequested = function(url,type,willNavigate, main){
console.log("\n----------------------------------------------");
console.log("Navigation Request Information:\n")
console.log('Trying to navigate to: ' + url);//where are you going?
console.log('Caused by: ' + type); //request type
console.log('Will it actually navigate: ' + willNavigate);
console.log('Sent from the page\'s main frame: ' + main);
console.log("----------------------------------------------\n");
};
page.onResourceError = function(resourceError){
console.log("\nHold Up, We have Errors!")
console.log("Resource Error Information: \n")
console.log('Resoruce ErrorID:' + resourceError.id + '\nURL:' +
resourceError.url);
console.log('Resource Error Code: ' + resourceError.errorCode +
'\nDescription: ' + resourceError.errorString);
};
page.onConsoleMessage = function(msg) {
console.log("The Browser Replied:" + msg);
};
//////////////////////////////////////////////////////////////////
page.onLoadStarted = function(){
console.log("Loadng Page...")
};
page.onLoadFinished = function(){
console.log("Loading finished:\n");
};
//////////////////////////////////////////////////////////////////
page.viewportSize = {
width: 1920,
height: 1200
};
var sel = 'button1'; //DOM manipulate, selector
var type = 'click', //action
//webpage.open
page.open(url,function(status){
if(status === "success"){
page.includeJs(
"http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js",function()
{//jquery syntax has been successfully included
setTimeout(function(){
var t = page.evaluate(function(sel) {
var a = $('title').text();
return a;
},0,sel);
console.log("Title: " + t + "\n\n");
phantom.addCookie({
Cisco_DeviceManager : 'value', /* required property */
SSLPreference : 2, /* required property */
gettingstarted : 1
});
page.open('http://10.44.39.252/xhome.htm', function (status) {
$(document).ready(function(){
console.log("Your Document is Ready:"+ document.title +"\n");
/*ajax assynchronous http request
$.ajax({
async: false,//blocks the ajax call, SYNCHRONOUS ajax Request
url: 'http://10.44.39.252/setup_report.htm?button1=Continue',
type: 'GET',
data: {button1: 'Continue'},
success: function (out) {
console.log("REQUEST SENT!\n\n");
console.log(typeof(out));
$('button1').trigger(sel);
console.log($('.homecontent').text);
//$("button1").click(function(){
// $("input").trigger("select");
//});
},
error: function(){
console.log("Nein!");
}
});
*/
});
});
},3000);
setTimeout(function() {
page.render("phantomspecs1.jpg");
console.log("\nNow GTFO!")
phantom.exit();
},20000);
console.log("Wait for the Async...");//prints first!
},0);//closes includejs which doesnt operate in the next open...
}else{
console.log("Connect fail");
phantom.exit();
}
});
我需要phantomJS繞過啓動頁並轉到CiscoDeviceManager在那裏我可以使開關的信息。但我對JavaScript,JQuery和AJAX的知識仍然不足(本身並不是程序員,但在大學畢業後讓自己成爲編碼工作,但我確實有一些基本概念)
如果你們中的任何人都可以幫助我指出正確的方向爲了下一步,我可以完成任務並對其做文檔。毫無疑問,將是有價值的幻影社區(其中我很自豪能成爲的一部分)
真誠, Afiq阿卜杜勒·哈米德, 賽博馬來西亞
PhatnomJS組版本:https://groups.google.com/forum/#!topic/phantomjs/qLz36fGuVdk – PhamtomanJS