6.1 Selenium环境搭建

    技术2022-07-10  140

    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; } }
    Processed: 0.012, SQL: 9