码迷,mamicode.com
首页 > Web开发 > 详细

在CMD下启动vmware、Xshell连接虚拟机以及控制Chrome浏览器自动执行js登录校园网

时间:2016-05-06 20:18:42      阅读:1329      评论:0      收藏:0      [点我收藏+]

标签:

标题有点长,主要是写个bat出来玩玩,

(1)不用每次都手动关闭mysql服务(我不想把它设为手动启动,有强迫症)

(2)然后希望每次vmware能自动连上虚拟机

(3)以及每次Xshell都能自动启动,然后就连上虚拟机

(4)然后校园网每次都要打开,输入帐号密码什么的,才能连网,我希望它自己搞定

做完了这几步还是有点意思的,主要是浏览器还是网页的什么自动化测试,然后eclipse下项目打包成可执行的jar包

现在听我娓娓道来吧!

前面要达到的目的跟着后面的命令并无关联

(1)首先在bat里面关闭mysql服务

这个mysql的服务的关闭很简单,但是要以管理员方式执行,否则是会拒绝访问的

net stop mysql

这一步还是比较简单的

(2)在CMD里面启动虚拟机并让其打开一个操作系统的方式有如下两种,其中一种是

"D:\Program Files (x86)\VMware\VMware Workstation\vmware.exe" -x "F:\Virtual Machines\CentOS_64_minimal\CentOS 64 位.vmx"

这个方式可以打开虚拟机,但是,这里一定要有但是,它是以图形界面打开的,也就说,如果你不关掉这个图形界面这个命令将会一直处于执行状态

这样就不好了,你这飞完了翔还在这儿蹲着,不太合适,所以这个不好,那么只好采用下面的一种:

"D:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" start "F:\Virtual Machines\CentOS_64_minimal\CentOS 64 位.vmx" nogui

这中启动方式的好处就是不用打开图形界面,直接在后台启动vmware,并打开对应的操作系统,而且执行完了这句马上可以执行下一句。

(3)cmd下延时

启动完了vmware及其对应的操作系统之后呢,我们并不能直接的用Xshell去连虚拟机,应为虚拟机开启要花一定的时间,所以呢我们需要延时40~60s钟,这个依据个人电脑的配置而决定,采用的语句为:

ping -n 60 127.0.0.1  > nul

其实我也是没有想到居然使用ping这个命令来延时,-n后面的60代表ping这个命令进行60次还是60秒来着

> nul则是不用输出ping的结果,万万没想到你居然是这种ping

(4)Xshell连接虚拟机

start "" "D:\Program Files (x86)\NetSarang\Xshell 5\Xshell.exe"  -url ssh://jack:rose@192.168.197.129:22

这条命令可以在cmd下调用Xshell直接连接虚拟机,并且在打开Xshell的图形界面之后,cmd并不会滞留在这条命令

其中jack是我的虚拟机的一个用户名

而rose则是密码

192.168.197.129:22中192.168.197.129是虚拟机的ip地址,然后22则是端口号这个都不用改,只需要你的用户密码就行

(5)直接填写校园网的帐号密码并驱动浏览器登录

这个呢是比较复杂的一个部分,如果打开网页没有连网,那么浏览器便会跳转到登录界面,

本来呢校园网的帐号密码都是记住的,这时候只要运行个js执行登录的click( )就好了,

之前的做法是用cmd上直接用chrome.exe去打开百度,然后chrome里面就会有一个插件,自动执行js

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" www.baidu.com

这句话在cmd里面执行会使得chrome打开baidu,后然就自动执行插件

技术分享

这些就是插件里面的所有内容,放在一个叫做HelloWorld的文件夹中,然后在chrome中添加此插件就行了

技术分享

1.png是全智贤的图片作为图标吧

然后manifest.json是插件的主要程序

{
  "name": "第一个Chrome插件",
  "manifest_version": 2,
  "version": "1.0",
  "description": "我的第一个Chrome插件,还不错吧",
  "browser_action": {
    "default_icon": "1.png"
  },
  "content_scripts": [
    {
      "matches": ["http://192.168.0.1/*"],
      "js": ["myscript.js"]
    }
  ]
}

这个扩展程序也十分简单,其中"matches": [http://192.168.0.1/*],的意思是如果匹配到了这个网址的话

那么就执行下面的js里面的内容,ip是我瞎编的,我们学校的ip怎么能告诉你们呢,要脸!

myscript.js里面的内容则是:

void((function(){
	document.getElementById("loginname").value = "120";
	document.getElementById("password").value = "119";
	document.getElementById("action_login").click();
})())

这个js也很简单,直接就是填入帐号密码,然后呢,就是执行登录按钮。

其实这种做法也是可以的啦,但关键是我是个有情怀(强迫症),尼玛这样一搞浏览器登录校园网的帐号之后就不能自动关闭了,我受不了了。

然后在cmd下又不能让chrome自动退出,只能强行关闭进程,强行关闭进程之后呢,chrome在此打开的之后又会叨叨叨,什么异常关闭blabla

于是乎这条路也是走不通了。另外再想办法吧。

一个神奇的做法出来了,就是所谓的自动化测试了。

首先要用的工具有两个:一个是selenium,另外一个则是chromedriver_x64.exe

其中chromedriver_x64.exe是用来驱动chrome浏览器的,

而selenium我也不知道是来干嘛的,反正你往下看吧。

首先下载selenium,然后解压,里面的jar是拿来调用的

然后下载chromedriver_x64并且放在chrome.exe所在的目录下,我的是在:

C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

第一个版本的程序是:

package com.test.bat;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class DriveChrome {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//设置访问ChromeDriver的路径
		System.setProperty("webdriver.chrome.driver", 
				"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver_x64.exe");

		WebDriver driver = new ChromeDriver();
		driver.get("http://www.baidu.com/");

		// "http://192.168.0.1/srun_portal.php?cmd=login&switchip="是用来判断是否是校园网的登录页面
		// 是登录页面那么我们就要执行js,否则不执行
		if (driver.getCurrentUrl().startsWith("http://192.168.0.1/srun_portal.php?cmd=login&switchip=")) {
			//System.out.println(driver.getTitle());
			//System.out.println(driver.getCurrentUrl());
			JavascriptExecutor jse = (JavascriptExecutor)driver;
			jse.executeScript("document.getElementById(\"loginname\").value = \"120\"");
			jse.executeScript("document.getElementById(\"password\").value = \"119\"");
			jse.executeScript("document.getElementById(\"action_login\").click()");
		}
		driver.quit();
		return;
	}
}

这个需要你把selenium解压下的2个jar包以及解压文件夹下lib文件夹的jar都导入到java项目中,

其实这个也没啥问题,可以登录也可以关闭chrome浏览器,但是,又有但是呢,尼玛驱动chrome浏览器的chromedriver_x64.exe这个进程一直在

在我们这里很简单直接在cmd强行杀死该进程就可以了,但是他们做测试的人说,这样不行啊,测试的时候这个chromedriver_x64.exe可是要一直调用呢,

最后是在这个代码里面就把它关掉呢!

于是诞生出下面的一个版本:

package com.test.bat;

import java.io.File;
import java.io.IOException;

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class StartChrome {

	public static void main(String[] args) {

		ChromeDriverService service = new ChromeDriverService.Builder().usingDriverExecutable
				(new File("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver_x64.exe"))
				.usingAnyFreePort().build();
		try {
			service.start();
			System.out.println("test");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		WebDriver driver = new RemoteWebDriver(service.getUrl(),
				DesiredCapabilities.chrome());
		// WebDriver driver = new ChromeDriver();
		driver.get("http://www.baidu.com/");
		// System.out.println(driver.getCurrentUrl());
		// 通过判断 title 内容等待搜索页面加载完毕,间隔10秒
		
		try {
			(new WebDriverWait(driver, 20)).until(new ExpectedCondition<Boolean>() {
				public Boolean apply(WebDriver d) {
					return d.getTitle().toLowerCase().startsWith("用户登录");
				}
			});
			
		} catch (WebDriverException e) {
			driver.quit();
			service.stop();
			return;
		}
		
		if (driver.getCurrentUrl().startsWith("http://192.168.0.1/srun_portal.php?cmd=login&switchip=")) {
			//System.out.println(driver.getTitle());
			//System.out.println(driver.getCurrentUrl());
			JavascriptExecutor jse = (JavascriptExecutor)driver;
			jse.executeScript("document.getElementById(\"loginname\").value = \"120\"");
			jse.executeScript("document.getElementById(\"password\").value = \"119\"");
			jse.executeScript("document.getElementById(\"action_login\").click()");
		}
		driver.quit();
		service.stop();
		return;
	}
}

这里呢chromedriver_x64.exe的执行是可以控制的,

service.start();

service.stop();

这两句话就可以解决chromedriver_x64.exe进程的打开和关闭,而且这里面还添加了浏览器加载过程中的等待

然后就是,将这个项目打包,我在eclipse中打包的是可执行的jar包。

调用这个可执行的jar包的命令为:

java -jar C:\Users\PC126\Desktop\hahaha.jar

最后虽然是可以关闭chromedriver_x64这个进程,但是呢会留下conhost.exe这个进程,这个进程只好在cmd里面删掉了

最后的bat是:

 echo 这是一个难得的注释,其实我是在胡说八道,为了多凑点字

net stop mysql

"D:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" start "F:\Virtual Machines\CentOS_64_minimal\CentOS 64 位.vmx" nogui

ping -n 60 127.0.0.1
echo ping -n 60 127.0.0.1  > nul

start "" "D:\Program Files (x86)\NetSarang\Xshell 5\Xshell.exe"  -url ssh://jack:rose@192.168.197.129:22

java -jar C:\Users\PC126\Desktop\hahaha.jar

"D:\Program Files (x86)\Tencent\QQ\Bin\QQ.exe"

taskkill /f /t /im conhost.exe

 

本篇纯属好玩

在CMD下启动vmware、Xshell连接虚拟机以及控制Chrome浏览器自动执行js登录校园网

标签:

原文地址:http://www.cnblogs.com/tuhooo/p/5466922.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!