Selenium WebDriver的相關介紹及資源下載:http://docs.seleniumhq.org/
在2016年2月份Selenium WebDriver更新到了2.52.0版本,建議在使用舊版本的更新至該版本,在穩定性和性能上提高不少。
Selenium支持驅動眾多的浏覽器,包括PC、移動端及PhantomJS等。
以在windows下的JAVA開發環境為例,下載http://selenium-release.storage.googleapis.com/2.52/selenium-java-2.52.0.zip,解壓後添加到工程中。PC端建議使用Google Chrome和PhantomJS。PhantomJS可以理解為沒有界面的Safari(QtWebkit作為渲染引擎,JS引擎是JavascriptCore)。要使Selenium能驅動Google Chrome,還需要根據你的系統環境下載chromedriver,下載地址:https://sites.google.com/a/chromium.org/chromedriver/downloads。在本文撰寫的時候,chromedriver最新版本為2.21。需要注意的是,2.21版本支持Chrome的版本為v46-50,如果chromedriver和你使用的Chome版本不匹配,程序可能無法正常工作。
chromedriver下載解壓後,可以放在任意目錄,在程序中指定好環境變量路徑即可:
1 System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "\\driver\\chromedriver.exe"); 2 WebDriver webDriver = new ChromeDriver(); 3 webDriver.get("https://www.google.com/");
在驅動並啟動Google Chrome時,浏覽器實例是不帶有任何用戶環境配置的,需要自己加載,舉個例子:
指定Google Chrome的緩存目錄:
1 ChromeOptions options = new ChromeOptions(); 2 options.addArguments("--disk-cache-dir="+System.getProperty("user.dir")+"\\cache"); 3 WebDriver webDriver = new ChromeDriver(options);
command line flag如:
--start-maximized:啟動時最大化浏覽器窗口;
--window-position=x,y:啟動時指定浏覽器屏幕坐標;
--window-size=w,h:啟動時指定浏覽器寬高;
--disk-cache-size=s:指定浏覽器可使用的磁盤緩存大小;
--media-cache-size=1:指定媒體文件緩存大小;
--ignore-certificate-errors:忽略證書錯誤;
--disable-extensions:禁用擴展;
--disable-translate:禁用翻譯轉換;
更多的可參考:http://www.chromium.org/developers/how-tos/run-chromium-with-flags,http://peter.sh/experiments/chromium-command-line-switches/
另外一種方法是使用capabilities,參考:https://sites.google.com/a/chromium.org/chromedriver/capabilities
如果使用phantomjs,同樣的,指定好系統環境變量路徑即可:
1 System.setProperty("phantomjs.binary.path", System.getProperty("user.dir") + "\\driver\\phantomjs.exe"); 2 webDriver = new PhantomJSDriver(); 3 webDriver.get("https://www.google.com/");
在get()完成,接下來就可以操作浏覽器、提取頁面內容了,比如:
提取頁面中的image:
1 WebElement webElement; 2 List<WebElement> webElements; 3 webElements = webDriver.findElements(By.cssSelector("body img")); 4 for (webElement : webElements) { 5 System.out.println(webElement.getAttribute("src")); 6 System.out.println(webElement.getSize()); 7 };
Selenium WebDriver的API參考地址:http://selenium.googlecode.com/svn/trunk/docs/api/java/index.html
如果在get()的時候打開了多個浏覽器窗口,可通過switchTo().window(winHandle),切換到各窗口:
1 String defaultWinHandle = webDriver.getWindowHandle(); 2 if (webDriver.getWindowHandles().size()>1) { 3 for(String winHandle : webDriver.getWindowHandles()){ 4 if (!winHandle.equals(defaultWinHandle)) { 5 webDriver.switchTo().window(winHandle); 6 //do something... 7 //close window: webDriver.close(); 8 }; 9 }; 10 webDriver.switchTo().window(defaultWinHandle); 11 };
在操作完成後,退出:
1 webDriver.quit();
如果頁面中有iframe,如何可靠的切入切出?如果iframe還有嵌套怎麼辦?
待續!
原創文章,轉載請標明出處。