在CMD下启动vmware、Xshell连接虚拟机以及控制Chrome浏览器自动执行js登录校园网
标题有点长,主要是写个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登录校园网的更多相关文章
- Linux入门(一)常见虚拟机及Linux系统安装、xshell连接虚拟机
1环境 linux常用两种虚拟机 1.1 oracle VM VirtualBox 官方网站:https://www.virtualbox.org/ 1.2 vmware 下载链接:https: ...
- xshell连接虚拟机ubuntu
在ubuntu界面,打开终端terminal,输入: ifconfig 出现如下界面: fb993608316@ubuntu:/$ ifconfig eth0 Link encap:Ethernet ...
- 开工:创建虚拟机,xshell连接虚拟机,复制虚拟机,docker安装,添加加速器
创建虚拟机:http://www.linuxidc.com/Linux/2015-08/121807.htm http://www.linuxidc.com/Linux/2010-04/25573.h ...
- XShell 连接虚拟机中的服务器 失败 、连接中断(Connection closed by foreign host.)
在使用XShell连接虚拟机中的服务器时,报以下错误并断开连接,之前连接还是挺稳定的,忽然就这样了 Last login: Thu Aug :: from 192.168.1.102 [root@no ...
- 创建虚拟机、安装centos系统,xshell连接虚拟机
创建虚拟机 文件--->新建虚拟机--->自定义最高级 选择虚拟机兼容性: workstation12.0:限制少,而且兼容的多 稍后安装操作系统 选择Linux系统 可选择centos7 ...
- xshell连接虚拟机详解--技术流ken
xshell连接虚拟机 第一步:网络模式更改为桥接模式 第二步:重启网络 [root@ken1 ~]# systemctl restart network 第三步:获取IP地址 输入命令ip a 第四 ...
- Xshell 连接虚拟机特别慢 解决方案
由于各种原因,xshell连接虚拟机的rhel或者CentOS都几乎是龟速...... 今天专门查了一下解决方案: 原来是ssh的服务端在连接时会自动检测dns环境是否一致导致的,修改为不检测即可,操 ...
- xshell 连接虚拟机过程
(1)Ctrl+Shift+T 打开终端 terminal (2)ifconfig得到ip网络地址 (3)ssh安装已经打开ssh服务 (4)安装openssh-server sudo apt ins ...
- windows下xshell连接虚拟机的CentOS 7
1.虚拟机设置 2.虚拟机的“编辑”-“虚拟网络编辑器” 3.windows 中运行“cmd”,输入“ipconfig”查看ip,避免冲突 4.在虚拟机网络编辑器界面中,选择“VMnet8” 5.记住 ...
随机推荐
- 2016年度GitHub上Stars最多的10个项目
来源于:https://zhuanlan.zhihu.com/p/24627923 2016年接近尾声,在最近的几篇文章中,会整理总结一些2016年度开源项目.今天整理的是:2016年度GitHub最 ...
- mysql中的慢查询日志
首先我们看一下关于mysql中的日志,主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据库的重要组成部分.日志文件中记录着mysql数据库运行期间发生的变化:也就是 ...
- kubectl命令使用
语法: kubectl [command] [TYPE] [NAME] [flags] 1 command:子命令,用于操作Kubernetes集群资源对象的命令,如create, de ...
- C中字符串分割函数strtok的一个坑
strtok的典型用法是: p = strtok(s4, split); while(p != NULL){ printf("%s\n", p); p = strtok(NULL, ...
- NSURLRequestCachePolicy 缓存策略
1> NSURLRequestUseProtocolCachePolicy = 0, 默认的缓存策略, 如果缓存不存在,直接从服务端获取.如果缓存存在,会根据response中的Cache-Co ...
- 从一个activity返回
页面之间的跳转有startActivity 和startActivityForResult两种, 返回的话用finish方法,如下示例 MyActivity.this.finish();那你返回按钮使 ...
- OAF_OAF增删改-新增的实现(案例)
2014-09-14 Created By BaoXinjian
- Android-SQLiteOpenHelper
Android-SQLiteOpenHelper 一 概念 是对SOLiteDatabase的封装.主要用于建立和版本号控制,方便我们去建立库表结构 二 用法 又一次封装一个MySqliteOpenH ...
- oracle Database link 创建
http://www.cnblogs.com/yhason/p/3735319.html
- Apache优化:修改最大并发连接数(转)
Apache是一个跨平台的web服务器,由于其简单高效.稳定安全的特性,被广泛应用于计算机技术的各个领域.现在,Apache凭借其庞大的用户数,已成为用户数排名第一的web服务器. 尽 管如此,在实际 ...