1、环境搭建
jdk1.6版本:selenium 2.4版本。
jdk1.8版本:selenium3.14版本。
(1)selenium的jar包下载:
地址:http://selenium-release.storage.googleapis.com/index.html
需要用:selenium-server-standalone-3.9.1.jar(需要在cmd下安装,java -jar ***),selenium-java-2.40.0.jar,selenium-java-2.40.0-srcs.jar还有它的libs。
(2)webDriver下载:
网址: http://chromedriver.storage.googleapis.com/index.html
或者 http://npm.taobao.org/mirrors/chromedriver/
注意:webDriver必须与浏览器版本相对应,否则会出现问题
2、程序代码示例
//固定时间等待:driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); //设定最大等待时间,一旦标签存在即可返回:wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".abc"))) WebDriver driver = new ChromeDriver(); // 新建一个WebDriver 的对象,但是new 的是谷歌的驱动 driver.get(url); // 打开指定的网站 try { Thread.sleep(60000);// 60秒 driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); } catch (Exception e) { e.printStackTrace(); } //定位层级元素 WebElement e = driver.findElement(By.cssSelector(".animation-toggle")); e.click(); //等待加载完页面 try { Thread.sleep(60000);// 60秒 driver.manage().timeouts().implicitlyWait(60,TimeUnit.SECONDS);//等待界面加载完 } catch (Exception e2) { e2.printStackTrace(); } SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date d=new Date(); List<WebElement> list = driver.findElements(By.cssSelector("img.frame"));//img标签,class为frame int i=-1; for (WebElement el : list) { String img_url=el.getAttribute("src"); //System.out.println(img_url); String time = sdf.format(d.getTime()+i*24*60*60*1000); loadPage(img_url,type,time); i=i+1; } driver.quit();// 退出浏览器
3、元素定位
(1)根据tagName
driver.findElement(By.cssSelector("input")
(2)根据ID
driver.findElement(By.cssSelector("input#username"));html标签和#id
driver.findElement(By.cssSelector("#username"));只是#id
(3)根据className
单一class:driver.findElement(By.cssSelector(".username"));.class
复合class:driver.findElement(By.cssSelector(".username.**.***"));.classA.classB
(4)根据元素属性
1)精准匹配:
[A] driver.findElement(By.cssSelector("input[name=username]"));属性名=属性值,id,class,等都可写成这种形式
[B] driver.findElement(By.cssSelector("img[alt]"));存在属性。例如img元素存在alt属性
[C] driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));多属性
2)模糊匹配:(正则表达式匹配属性)
[A] ^= driver.findElement(By.cssSelector(Input[id ^='ctrl']));匹配到id头部 如ctrl_12
[B] $= driver.findElement(By.cssSelector(Input[id $='ctrl']));匹配到id尾部 如a_ctrl
[C] *= driver.findElement(By.cssSelector(Input[id *= 'ctrl']));匹配到id中间如1_ctrl_12
更多正则匹配原则请查看CSS3 选择器——属性选择器 http://www.w3cplus.com/css3/attribute-selectors
(5)查询子元素
<form > <span > <input > </span> <span > <input > </span> </form>