基於Selenium實現資訊採集功能
阿新 • • 發佈:2018-12-27
selenium.properties 配置檔案
prop.key=phantomjs.binary.path prop.linux=/home/phantomjs-2.1.1/bin/phantomjs prop.windows=F:/Development tools/WebDriver/phantomjs.exe prop.lucene=F:/lucene/index/ #prop.key=webdriver.chrome.driver #prop.linux=/home/chromedriver #prop.windows=F:/Development tools/WebDriver/chromedriver.exe
SeleniumUtil 工具類
public class SeleniumUtil { private Properties properties = getProperties(); private String osName = System.getProperties().getProperty("os.name"); /** * 呼叫配置檔案 */ private Properties getProperties() { Properties properties = new Properties(); try { properties.load(SeleniumServiceImpl.class.getClassLoader().getResourceAsStream("selenium.properties")); } catch (IOException e) { e.fillInStackTrace(); } return properties; } /** * 開啟程序 */ private void createProperty() { // 判斷系統的環境win or Linux if ("Linux".equals(osName)) { System.setProperty(properties.getProperty("prop.key"), properties.getProperty("prop.linux")); } else { System.setProperty(properties.getProperty("prop.key"), properties.getProperty("prop.windows")); } } public void start(String url) { createProperty(); DesiredCapabilities caps = new DesiredCapabilities(); caps.setCapability("takesScreenshot", false); WebDriver driver = new PhantomJSDriver(caps); driver.get(url); for (WebElement element : getHandle(driver).findElements(By.tagName("a"))) { } } /** * 獲得最新開啟的頁面 */ private WebDriver getHandle(WebDriver driver) { ArrayList<String> handles = new ArrayList<>(driver.getWindowHandles()); driver.switchTo().window(handles.get(handles.size() - 1)); return driver; } /** * 判斷元素是否存在 */ private boolean isElement(WebDriver driver, By selector) { try { getHandle(driver).findElement(selector); return true; } catch (Exception e) { return false; } } /** * 防止點選事件出現異常 */ private void click(WebDriver driver, WebElement element) { try { if (element.getTagName().equals("a")) { ((JavascriptExecutor) driver).executeScript("arguments[0].target=arguments[1]", element, "_blank"); } ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element); sleep(1000); } catch (Exception e) { e.printStackTrace(); } } /** * 關閉當前頁 */ private void close(WebDriver driver, boolean isClose) { if (isClose) { driver.close(); sleep(1000); // 重新返回當前頁 } getHandle(driver); } /** * 睡眠 防止記憶體溢位 */ private void sleep(long millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { e.fillInStackTrace(); } } /** * 關閉程序 */ private void clearProperty() { System.clearProperty(properties.getProperty("prop.key")); } }