1. 程式人生 > >基於Selenium實現資訊採集功能

基於Selenium實現資訊採集功能

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"));
    }

}