2018年3月31日 星期六

Java使用Selenium進行瀏覽器自動化操作

Selenium是一個瀏覽器自動化的工具,可以使用它來控制瀏覽器執行各種操作,
在這篇文中我簡單介紹JAVA如何使用Selenium及展示一個範例。

前置步驟:
  1. 下載 Selenium 的 Java Lib
    到Selenium的下載頁面下載
    1. Selenium Client & WebDriver Language Bindings
    2. Selenium Standalone Server (我下載的為3.11.0)
  2. 下載各瀏覽器的WebDriver
    1. Chrome : ChromeDriver
    2. Firefox : geckodriver
  3. 在Java程式中引入Library和指定WebDriver就可以開始控制瀏覽器了。
在這邊展示一個簡單的程式,控制瀏覽器進到Google首頁,在搜尋框中打上關鍵字,然後將10頁的查詢結果Title和Link url印出來。

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class SeleniumTest1 {

 public static void main(String[] args) {
  System.out.println("Start");
  //自己選擇要用的瀏覽器 WebDriver
  //用Chrome
  System.setProperty("webdriver.chrome.driver","D:\\JavaLib\\Selenium\\webdrivers\\Chrome\\chromedriver.exe");
  WebDriver driver = new ChromeDriver();
  
  //用Firefox
  //System.setProperty("webdriver.gecko.driver","D:\\javaLib\\selenium-java-3.10.0\\Firefox\\geckodriver.exe");
  //WebDriver driver = new FirefoxDriver();
  
  //使用implicitlyWait,抓取DOM時,會等DOM出現才抓,最多等10秒
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  driver.get("https://www.google.com.tw/"); //開啟瀏覽器到 Google 首頁
  
  //抓取DOM element,#lst-ib 為Google搜尋框
  WebElement searchInput = driver.findElement(By.id("lst-ib"));
  
  //執行Javascript範例
  //將Google搜尋框打上字,"keyword"
  JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
  javascriptExecutor.executeScript("arguments[0].value='keyword';", searchInput);
  
  //用WebElement物件直接操做DOM element範例
  //抓取DOM element,name=btnK 為Google搜尋按鈕
  WebElement searchBtn = driver.findElement(By.name("btnK"));
  searchBtn.click();
  
  //印出十頁的所有搜尋結果Title和Link url
  for (int i = 0; i < 10; i++) {
   //抓取DOM elements, (.r a) 為Google搜尋結果的link
   List<WebElement> searchReultATagList = driver.findElements(By.cssSelector(".r a"));
   for (WebElement searchReultATag : searchReultATagList) {
    System.out.println(searchReultATag.getText() + " : ");
    System.out.println(searchReultATag.getAttribute("href"));
    System.out.println("=======================");
   }
   //抓取DOM element, #pnnext 為Google搜尋下一頁按鈕
   WebElement nextPageBtn = driver.findElement(By.id("pnnext"));
   nextPageBtn.click();
  }
  
  driver.quit(); //關閉瀏覽器
 }

}



sss
參考資料

  1. Selenium using Java - The path to the driver executable must be set by the webdriver.gecko.driver system property
  2. How to get selenium to wait for ajax response?
  3. Selenium驱动火狐、IE、Edge和Chrome浏览器的方法

沒有留言 :

張貼留言