使用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.0

E:\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 block
                 e.printStackTrace();
             }
         }
}

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

Exception in thread "main" org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Protected Mode
 settings 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)

解决方法请参照:解决报错的方法
其他浏览器原理类似,如需帮助请留言。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值