玩转WebDriver

场景使用:可以当成爬虫,抓取网页数据(适用:当前网页,登陆后的当前页面。既可以做缓存也可以不做缓存直接使用)

使用方法

  1. 首先加载驱动(目前接触过IE跟Chrome)
    a. 下载:IEDriverServer.exe
    b. 下载:chromedriver.exe(ab二选一)
    c. 下载: selenium-server-standalone-2.25.0.jar(核心jar)

  2. 代码对应启动浏览器方式
    a. Chrome

    //驱动加载   
    System.setProperty("webdriver.chrome.driver","C:\\driverFile\\chromedriver.exe"); 
    //创建一个WebDriver实例
    WebDriver driver=new ChromeDriver();
    //打开百度网页:
    driver.get("www.baidu.com");

    b. IE

      //驱动加载  
        System.setProperty("webdriver.ie.driver",   PropertiesUtil.getPropertyValue ("C:\\driverFile\\ IEDriverServer.exe"));
    
    DesiredCapabilities   ieCapabilities     =DesiredCapabilities.internetExplorer();
    
    ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
    
    //IE跟谷歌的不同之处
    driver = new InternetExplorerDriver (ieCapabilities); 
    //打开百度网页:
    driver.get("www.baidu.com");
    
  3. 获取页面元素

    a. 根据id/class/css/cssSelector :

        //html
    <button id="carButton" name="carFindButton" class="labelTextMyFocus">查询</button>
    
        //id
    WebElement btnId       =  driver. findElement (By.id("carButton"));
    
        //name
    WebElement btnClass  =driver. findElement (By.name("carFindButton"));
    
        //class
    WebElement btnClass  =driver. findElement (By.className("labelTextMyFocus"));

    //如果class里面有空格,说明包含了两种样式,此时使用cssSelector

        //例如:class="labelText ui-button"
    WebElement btnCss  =driver. findElement (By.cssSelector("button[class='labelText ui-button']"));
    

    b. 根据xpath(这个什么鬼元素都可以抓,炒鸡好用,所以单独拿出来说)

    //html
      <div class="sort-opt">
          <a href="yes">确定</a>
     </div>
        //第一种
    WebElement textA = driver.findElement(By.xpath("//a[text()='确定']"));
    
        //第二种
    WebElement hrefA = driver.findElement(By.xpath("//a[contains(@href, 'yes')]"));

    更多更详细的元素获取方法,见原创博客 http://www.cnblogs.com/qingchunjun/p/4208159.html

  4. 页面句柄转换
    适用场景:利用登录(页面A),进入登录后(页面B)操作,获取当前(页面B)的元素,结果获取到的一直取不到。再或者通过B直接到C页面,多个页面操作的。这时候就需要句柄转换。

    public static void getWindow(WebDriver driver){
        String currentWindow = driver.getWindowHandle();
          //得到所有窗口的句柄 //得到当前句柄
         Set<String> handles = driver.getWindowHandles();
        // System.out.println("handles.size():"+handles.size());
        //排除当前窗口的句柄,则剩下是新窗口
        Iterator<String> it = handles.iterator();
        while(it.hasNext()){
            String window= it.next();
            //System.out.println("window:"+ window+",");
            if(currentWindow == window)  continue;
                driver.switchTo().window(window);      
            }
    }
    
    
  5. 切换ifrme
    适用场景:一个网页html中布局层层嵌套(好比html里面再嵌入html完整代码),代码被iframe包含,这时候iframe里面的html元素是获取不到的,需要跳转进入iframe.

    //html
    <html>
        html1
        #document
        <ifrme id="mainPage">
            <html>
                <button id="login">登录</button>
            </html>
        </iframe>
    <html>
    //先跳转ifrme
    WebElement frame=driver.findElement(By.id("mainPage"));
    driver.switchTo().frame(frame); 
    //获取loginButton
    WebElement loginBtn=driver.findElement(By.id("login"));
  6. 抓取表格数据

    //html
    <table id="student">
        <tr><td>张三</td></tr>
        <tr><td></td></tr>
        <tr><td>24</td></tr>
    </table>
        List<WebElement> bodyTrs = driver.findElements(By.cssSelector(".student tr"));//table
        //打印出所有单元格的数据 
        for (WebElement tr : bodyTrs) {   
            //得到当前tr里td的集合  
            List<WebElement> bodyTds =  tr.findElements(By.tagName("td"));   
            for (WebElement bodyTd : bodyTds) {  
                System.out.print(bodyTd.getText()+" ");
                //得到td里的文本 
                }
            }  
        }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值