1.简介
Selenium WebDriver主要应用于程序与浏览器之间的交互,其可以用来实现数据的采集。Selenium不自带浏览器,需要与第三方浏览器结合使用,如本章与Selenium结合使用的浏览器为谷歌浏览器,相比Jsoup和HttpClient等工具,Selenium有其特有优势,如自动加载页面、执行JavaScript脚本、模拟真实的浏览器操作等。
2.引入依赖
在Idea或者Eclipse中创建Maven工程,并在Maven工程的pom.xml文件中添加Selenium的dependency,本专栏采用的版本是3.141.59。
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
基于pom.xml文件的配置信息,可以下载Selenium的jar包。在Selenium项目中,共包含如下图所示的若干个依赖包。
3.驱动下载
在相关的jar包配置完成后,需要下载Selenium WebDriver连接谷歌浏览器的工具chromedriver。在谷歌浏览器地址栏输入“chrome://version/”查看版本信息,然后在
“http://chromedriver.storage.googleapis.com/index.html”上寻找与谷歌浏览器版本相匹配的驱动版本。下载完成后,将文件解压到本地的自定义目录chrome文件夹下。
4.获取WebDriver
程序6-1中,使用setProperty(String key,String value)配置chromedriver,然后实例化WebDriver(声明使用的是谷歌浏览器)。
//程序6-1
public class WebDriverUtils {
public static WebDriver getWebDriver(){
System.setProperty("webdriver.chrome.driver","/Users/steven/Documents/chrome/chromedriver");
//声明使用的是谷歌浏览器
ChromeOptions chromeOptions=new ChromeOptions();
//实例化一个Chrome浏览器的实例
WebDriver driver = new ChromeDriver();
//设置打开的浏览器窗口最大化
driver.manage().window().maximize();
//设置隐性的等待时间
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
return driver;
}
}
使用Selenium采集数据,有时并不希望程序在终端打开浏览器,此时,可通过设置参数来隐藏浏览器,添加参数实现无界面状态。
//程序6-1
public class WebDriverUtils {
public static WebDriver getWebDriver(){
System.setProperty("webdriver.chrome.driver","/Users/steven/Documents/chrome/chromedriver");
//声明使用的是谷歌浏览器
ChromeOptions chromeOptions=new ChromeOptions();
//设置无头模式参数
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("-headless");
chromeOptions.addArguments("--disable-gpu");
//实例化一个Chrome浏览器的实例
WebDriver driver = new ChromeDriver(chromeOptions);
//设置打开的浏览器窗口最大化
driver.manage().window().maximize();
//设置隐性的等待时间
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
return driver;
}
}
5.设置代理
使用代理服务器访问网页内容,能够高度隐藏爬虫的真实IP地址,从而防止网络爬虫被服务器封锁, Selenium设置代理IP的方法如程序6-2所示。
//程序6-2
public class WebDriverProxyUtils {
public static WebDriver getWebDriver() {
System.setProperty("webdriver.chrome.driver", PathConstant.CHROME_DRIVER_PATH);
ChromeOptions chromeOptions = new ChromeOptions();
//设置代理
Proxy proxy = new Proxy();
proxy.setAutodetect(false);
proxy.setHttpProxy("58.218.200.223:12781");
proxy.setSslProxy("58.218.200.223:12781");
chromeOptions.setCapability("proxy", proxy);
chromeOptions.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
//实例化一个Chrome浏览器的实例
WebDriver driver = new ChromeDriver(chromeOptions);
//设置打开的浏览器窗口最大化
driver.manage().window().maximize();
//设置隐性的等待时间
driver.manage().timeouts().pageLoadTimeout(120, TimeUnit.SECONDS);
return driver;
}
}