WebDriver环境搭建使用

1. WebDriver简介

利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API。直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏,窗口大小,启动,关闭,安装插件,配置证书之类的)

2. 环境搭建

使用webdriver需要三个前提:浏览器(服务端安装的真实的浏览器), webdriver驱动(可执行程序), webdriver api(程序调用包)。本文使用的是 google chrome浏览器, chromdriver, 和 selenium,这三者是有版本限制的,若不匹配则可能不能正常运行的情况。匹配的版本之一:

  1. Google chrome 69 chrome 会定时更新,所以要禁止chrome更新版本
  2. chromdriver 2.42 下载地址 http://chromedriver.storage.googleapis.com/index.html
  3. selenium 2.44.0 maven配置如下
	      
            org.seleniumhq.selenium
            selenium-java
            2.44.0
          

将chromdriver.exe放到chrome.exe所在的文件夹下。如下图所示
WebDriver环境搭建使用_第1张图片

3. 使用

  1. 启动浏览器
      // 设置驱动位置
	  System.setProperty("webdriver.chrome.driver", "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe");
	  WebDriver driver = new ChromeDriver();
	  // 请求url
	  driver.get(url);
	  // 获得元素
	  WebElement element = driver.finElement(By.xpath("//div"));

使用XPath查找元素是笔者推荐的一种方式,XPath语法简单,功能强大。

  1. 截图
    WebDriver是可以截取页面上任意一个元素的图片的,代码如下:
public byte[] getImageFromDriver(WebDriver driver, String imageType) {
        try {
		    // 获得要截图的元素
		    WebElement captchaImageElement = driver.finElement(By.className("Img"));
            // 屏幕截图对象
            TakesScreenshot takesScreenshot = (TakesScreenshot) driver;
            // 获取截图byte
            byte[] screen = takesScreenshot.getScreenshotAs(OutputType.BYTES);
            BufferedImage img = ImageIO.read(new ByteArrayInputStream(screen));
            // 获得元素的高度和宽度
            int width = imageElement.getSize().getWidth();
            int height = imageElement.getSize().getHeight();
            // 获得元素坐标
            Point point = imageElement.getLocation();
            BufferedImage dest = img.getSubimage(point.getX(), point.getY(), width, height);
            // 存为png格式
            ByteArrayOutputStream byteout = new ByteArrayOutputStream();
            ImageIO.write(dest, imageType, byteout);
            return byteout.toByteArray();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

4. 注意事项

driver.close() 只是关闭浏览器窗口,其进程还存在(遇到的坑)
driver.quit() 关闭浏览器,并关闭进程

5. 总结

据说有了webdriver,让爬虫穿上了盔甲。笔者同意呀!!

你可能感兴趣的:(javaweb,java)