- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近进入了 PhantomJS 目前正在使用 PhantomJS 来完成我的第一份开发工作。
我的任务是从通过 LAN 电缆连接到 PC 的旧 Cisco Catalyst 2960 x 交换机上抓取网络交换机信息(主机名、产品 ID、IP 地址、MAC 地址等)。
我的 http 身份验证与 phantomJS headless 浏览器一起正常工作,并且可以打开第一个切换页面,但它会导致启动页面,如下图所示。 cisco switch startup report
此启动页面仅在用户必须单击具有如下所示的表单按钮输入属性的继续按钮后首次登录/访问交换机时出现。 (顺便说一句,用 AJAX 编写)
<form METHOD="GET">
<input type="button" name="button1" value="Continue"
onclick="setcookiesandLoadCiscoDeviceManager()"></form>
通常在 Chrome 浏览器上,我们点击它并继续。随后,我们进入了感兴趣的主页,即包含交换机信息的 Cisco Device Manager 页面。(不允许发布图片,但可以在 phantomjs 小组讨论页面上找到)
我的问题是,使用 phantomJS headless 浏览器绕过启动报告的最佳方法是什么?要么...
交换机网页的架构概述 here
当首次请求 URL 10.44.39.252 时,将调用 3 个帧 src。我通过 phantomjs 回调知道这一点
page.onNavigationRequested
输入“button1”存在于setup_report.htm框架内。当按下“button1”时
setscookiesandLoadsCiscoDeviceManager();
被称为
此函数调用仅存在于在startup_report 和Cisco 设备管理器(10.44.39.252/xhome.htm) 之间转换的所有javascript 资源中的preflight.js 中。我认为浏览器 cookies 是这个问题的一个主要部分。
附件是我的源代码。它处于不同的完成程度
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 的了解仍然缺乏(本身不是程序员,但大学毕业后找到了一份编码员工作,但我确实有一些基本概念)
如果你们中的任何人可以帮助我指明下一步的正确方向,我就可以完成任务并编写相关文档。毫无疑问,这对 Phantom 社区很有值(value)。(我很自豪能成为其中的一员)
真诚的,阿菲克·阿卜杜勒·哈米德,马来西亚赛城
最佳答案
当您使用 headless 浏览器来完成这项工作时,最合乎逻辑的方法是像普通用户一样使用 headless 浏览器。。不要进行疯狂的 cookie 操作等,这只会增加您不需要做的工作。
PhantomJS 用于使用 JavaScript 来自动化浏览器交互,您所需要做的就是注入(inject)一些简单的 JavaScript 来与 UI 交互。
仅在用户登录时显示一次的表单应该很容易处理。
用户登录后,只需尝试获取按钮元素,如果存在,请单击它。
var btn1 = document.querySelector('input[name="button1"]')
if(btn1 !== null) {
//continue button exists trigger a click.
btn1.click();
}
此外,当您进行抓取工作时,有一个很棒的库,名为 casperJS您可以将其安装在 PhantomJS 之上,从而消除了很多复杂性。
关于javascript - PhantomJS Web 抓取 Cisco 交换机 Web 界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43275173/
如何收集设备/交换机上的带宽使用情况/利用率。据我所知,有些系统可以做这样的事情。他们似乎都有 snmp 的共同点。 我正在寻找有关可能滚动我自己的系统来收集这些数据的信息,这些数据稍后将用于基于 W
下表给出的 DES-3528 DLink 交换机的 OID 是什么 DES-3528:admin#show snmp comm 命令:显示 snmp 社区 SNMP 社区表 社区名称查看名称访问权限
我正在使用 Java ganymed 库通过 SSH2 连接到我们的交换机。我可以毫无问题地连接 Catalyst 交换机,但是当我连接到 Nexus 交换机时,我无法从命令中获得任何输出。 有人用过
我需要使用 php 远程登录到 cisco 交换机并执行 show interface status命令并获得结果。我尝试了一些在互联网上找到的 php 类,但它们都无法连接到设备。所以我尝试自己编写
这个问题已经有答案了: React Router v4 renders multiple routes (3 个回答) 已关闭 5 年前。 我见过各种例子,说当使用React Router V4时,你
我目前正在尝试编写一个脚本来更改 200 多台 Cisco 交换机的位置 (snmp)。 我的问题是我一次不能运行多个命令。我制作了一个批处理文件,它自动连接到交换机并读取列出命令的 .txt 文件。
我正在使用此代码 https://gist.github.com/svett/b7f56afc966a6b6ac2fc作为起点。 使用它并将其指向 cisco 路由器会得到以下错误消息: 拨号失败:s
我最近进入了 PhantomJS 目前正在使用 PhantomJS 来完成我的第一份开发工作。 我的任务是从通过 LAN 电缆连接到 PC 的旧 Cisco Catalyst 2960 x 交换机上抓
日前,IDC 发布的《2020 年网络市场跟踪报告》显示,2020 年全球网络市场规模为 490.1 亿美元,与去年同期相比下滑 3%,其中交换机、路由器和 WLAN 市场增速分别为 - 3.5%、
我是一名优秀的程序员,十分优秀!