900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 使用Selenium模拟浏览器登录 并获取页面信息

使用Selenium模拟浏览器登录 并获取页面信息

时间:2019-11-07 05:00:00

相关推荐

使用Selenium模拟浏览器登录 并获取页面信息

(一)、Selenium1和Selenium2介绍

Selenium1.0是一个基于浏览器的开源自动化测试工具,它中可以使用多种语言编程,在运行Selenium1.0程序之前,需要先启动selenium server服务,及selenium remote control,简称为RC。由于其实由JavaScript实现的,所以只要支持JavaScript的浏览器都可以很好的支持它。而Selenium2.0是Selenium1.0和WebDriver的结合,WebDriver可以直接操作HTML Unit驱动,速度快。Selenium2.0最显著的特点就是不需要再启动server服务了。

(二)、Selenium2以及相关驱动下载

各版本下载地址:点击下载Selenium2

下载界面如图所示:

(三)、启动Selenium2 Server

下载selenium-server-2.50.0.zip并解压出selenium-server-2.50.0文件夹,下载selenium-server-standalone-2.50.0.jar,将其放入selenium-server.zip解压的目录下面。在Windows下打开命令行,来到selenium-server-2.50.0文件夹下,输入以下命令:(例如java -jar selenium-server-standalone-2.50.0.jar 位置是:E:\ChromeGoogle\爬虫\selenium-server-2.50.0),命令如下:

C:\Users\Administrator>E:E:\>cd E:\ChromeGoogle\爬虫\selenium-server-2.50.0E:\ChromeGoogle\爬虫\selenium-server-2.50.0> java -jar selenium-server-standalone-2.50.0.jar

说多了都是废话,那么,激动人心的demo来啦!

import java.util.Iterator;import java.util.Set;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.ie.InternetExplorerDriver; import util.OperatorUtil;public class IEExample { public static void main(String[] args) { //设置IE浏览器驱动的位置 System.setProperty("webdriver.ie.driver", "D:\\iedriver\\IEDriverServer.exe"); //新建WebDriver 对象WebDriver driver = new InternetExplorerDriver(); //打开链接 OperatorUtil.open(driver, "http://xxx.xxx.xxxx.xx:xxxx/xxx/global.Login.doLogin.hf"); //获取当前页面的句柄String currentHandle = driver.getWindowHandle();System.out.println("currentHandle : " + currentHandle); //为组件赋值//获取页面组件id为userAccount的组件WebElement userName = driver.findElement(By.id("userAccount")); //为组件赋值userName.sendKeys("admin"); //此处填写你要登录界面的用户名//获取页面组件id为 userPassword的组件WebElement passWord = driver.findElement(By.id("userPassword")); //为组件赋值passWord.sendKeys("123456"); //此处填写你要登录界面的密码//获取登录按钮WebElement subtn = driver.findElement(By.id("login_btn"));//点击登录按钮subtn.click(); //停留时间OperatorUtil.waitTime(1000);Set<String> handles = driver.getWindowHandles(); Iterator<String> iterator = handles.iterator();//OperatorUtil.switchToNewWindow(driver);// 进入系统首页,并获取title验证OperatorUtil.waitTime(1000);while (iterator.hasNext()) {String h = (String) iterator.next();if (h != currentHandle) {//将窗口转换至点击登陆后的界面driver.switchTo().window(h);//输出跳转后页面的详细信息,打印到控制台,如果打印的HTML代码与正常登录后的界面代码相吻合,证明模拟登录成功System.out.println(driver.getPageSource()); }}try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } //关闭驱动driver.close(); } }

注意:亲自尝试过的小伙伴们肯定注意到了OperatorUtil类并没有对应的jar包,因为这是我自己写的一个工具类,里面办含了open(driver),waitTime(int)等方法,具体代码如下:

import java.util.Iterator;import java.util.Set;import org.openqa.selenium.WebDriver;public class OperatorUtil {//1 打开链接public static void open(WebDriver driver,String url){driver.get(url);}//2.切换到最新的窗口public static void switchToNewWindow(WebDriver driver){//得到当前句柄String currentWindow = driver.getWindowHandle();//得到所有窗口的句柄Set<String> handles = driver.getWindowHandles();//排除当前窗口的句柄,则剩下是新窗口Iterator<String> it = handles.iterator();while(it.hasNext()){if(currentWindow == it.next()) continue;driver.switchTo().window(it.next());}//return driver; }public static void waitTime(int time) { try {Thread.sleep(time);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

另外需要注意的是:运行程序一开始可能报错,报错信息如下:

Exception in thread "main" org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Protected Modesettings are not the same for all zones. Enable Protected Mode must be set to the same value (enabled or disabled) for all zones. (WARNING:The server did not provide any stacktrace information)

解决方法请参照:解决报错的方法

其他浏览器原理类似,如需帮助请留言。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。