Java网络爬虫之Selenium(一)

Selenium 是目前用的最广泛的Web UI 自动化测试框架。“所见即所得”,几乎网页上可以看到的都可以抓取到,缺点是会弹出一个网页弹窗来,之前在抓取一个网页时,由于网页有延时加载,用HttpClient和HtmlUnit抓不到想要的内容,没办法只能用Selenium了,由于Selenium抓取时会有一个网页弹窗,体验不是很好,所以不到万不得已的情况下我个人是不愿意用Selenium的,话不多说,让我们来看看Selenium的使用吧!

网址:http://www.77tj.org/

本示例所需jar包:

jdk1.8

selenium-3.5.0

FireFox 55.0.2

geckodriver-v0.19.0-win64.zip(FireFox驱动)

(上述版本一定要对应)

Java网络爬虫之Selenium(一)_第1张图片


        public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.gecko.driver","E:\\Java\\geckodriver.exe");//加载驱动
System.setProperty("webdriver.firefox.bin", "D:\\Firefox\\firefox.exe");//火狐浏览器安装地址
WebDriver driver  = new FirefoxDriver();
    driver.get("http://www.77tj.org/");
//显式等待(等待6秒),等到网页中class为gridview出现,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception
    new WebDriverWait(driver,6).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".gridview")));
    //driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);
    System.out.println("当前打开页面的标题是: "+ driver.getTitle()); 
    WebElement tab = driver.findElement(By.cssSelector(".gridview"));
    System.out.println(tab.getText());
    driver.close();   
}

Selenium设置延迟等待的三种方法:


1、最直接普通的方式:固定的等待时间

Thread.sleep(1000);

2、隐式等待方式(implicitlyWait):设置脚本在查找元素时的最大等待时间;

implicitlyWait()方法比sleep()方法智能,sleep()方法只能在一个固定的时间等待,而implicitlyWait()可以在一个时间范围内等待,称为隐式等待

隐式等待采用全局设置,也就是说,你所有的findElement方法都会隐式等待10s

driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);  

3、显示等待方法

WebDriverWait()

就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出Exception

第一种方法:new WebDriverWait(driver,6).until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".gridview")));

第二种方法:

new WebDriverWait(driver, 10).until(new ExpectedCondition() {

    public WebElement apply(WebDriver d) {  

                return d.findElement(By.cssSelector(".gridview"));  

            }  

});


你可能感兴趣的:(Java网络爬虫之Selenium(一))