1. 程式人生 > >使用Selenium模擬瀏覽器登入,並獲取頁面資訊

使用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)

解決方法請參照:解決報錯的方法
其他瀏覽器原理類似,如需幫助請留言。