WebDriver環境搭建使用
1. WebDriver簡介
利用瀏覽器原生的API,封裝成一套更加物件導向的Selenium WebDriver API。直接操作瀏覽器頁面裡的元素,甚至操作瀏覽器本身(截圖,視窗大小,啟動,關閉,安裝外掛,配置證照之類的)
2. 環境搭建
使用webdriver需要三個前提:瀏覽器(服務端安裝的真實的瀏覽器), webdriver驅動(可執行程式), webdriver api(程式呼叫包)。本文使用的是 google chrome瀏覽器, chromdriver, 和 selenium,這三者是有版本限制的,若不匹配則可能不能正常執行的情況。匹配的版本之一:
- Google chrome 69 chrome 會定時更新,所以要禁止chrome更新版本
- chromdriver 2.42 下載地址 http://chromedriver.storage.googleapis.com/index.html
- selenium 2.44.0 maven配置如下
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.44.0</version>
</dependency>
將chromdriver.exe放到chrome.exe所在的資料夾下。如下圖所示
3. 使用
- 啟動瀏覽器
// 設定驅動位置
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語法簡單,功能強大。
- 截圖
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,讓爬蟲穿上了盔甲。筆者同意呀!!
相關文章
- GPU 環境搭建指南:使用 GPU Operator 加速 Kubernetes GPU 環境搭建GPU
- 使用docker搭建gitlab環境DockerGitlab
- 使用 VSCode 搭建 Flutter環境VSCodeFlutter
- 使用docker搭建laravel環境DockerLaravel
- 使用 Docker 搭建 Laravel 本地環境DockerLaravel
- 使用 kind 快速搭建 kubernetes 環境
- 使用docker快速搭建hive環境DockerHive
- 環境搭建
- Vue環境搭建(使用完整框架)Vue框架
- 使用webpack搭建react開發環境WebReact開發環境
- Android systrace環境的搭建和使用Android
- 從環境搭建到打包使用TypeScriptTypeScript
- 使用 Rainbond 搭建本地開發環境AI開發環境
- 使用 Docker 搭建本地開發環境!Docker開發環境
- 使用 PhpStorm + Docker 搭建開發環境PHPORMDocker開發環境
- PHP開發環境 03 - 使用KFKDock搭建PHP專案環境PHP開發環境
- angular中使用Echarts(環境搭建+簡單使用)AngularEcharts
- 搭建lnmp環境LNMP
- 搭建gym環境
- Linuxg環境搭建Linux
- JDK環境搭建JDK
- Angular環境搭建Angular
- anaconda 環境搭建
- ReactNative環境搭建React
- swoft 環境搭建
- Flutter環境搭建Flutter
- 搭建Java環境Java
- Supervisor 環境搭建
- react環境搭建React
- FNA環境搭建
- FNA 環境搭建
- Maven 環境搭建Maven
- Dubbo環境搭建
- Vagrant 環境搭建
- LNMP 環境搭建LNMP
- OpenGL 環境搭建
- App環境搭建APP
- gogs環境搭建Go