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驱动)
(上述版本一定要对应)
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"));
}
});