标题有点长,主要是写个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 blocke.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" noguiping -n 60 127.0.0.1
echo ping -n 60 127.0.0.1 > nulstart "" "D:\Program Files (x86)\NetSarang\Xshell 5\Xshell.exe" -url ssh://jack:rose@192.168.197.129:22java -jar C:\Users\PC126\Desktop\hahaha.jar"D:\Program Files (x86)\Tencent\QQ\Bin\QQ.exe"taskkill /f /t /im conhost.exe
本篇纯属好玩