雨翔河
首页
列表
关于
selenium 使用 chrome 的 headless 模式
2019-01-24 15:06
#### 无界浏览器爬虫之selenium使用chrome的headless模式 > chrome浏览器更新到59版本之后终于在正式版里加入了headless模式 ,也就是可以操纵chrome进入无界面模式,以前写爬虫的时候使用无界浏览器普遍是用phantomjs,chrome浏览器加入headless模式毫无疑问会干掉phantomjs,今晚下班回到家写个代码正好尝试下效果。 这是我用springboot写的一个简单的chrome之headless无界浏览器爬虫抓取天眼查 首先gradle走起来, ``` group 'net.yuxianghe' version '1.0-SNAPSHOT' apply plugin: 'java' apply plugin: 'spring-boot' //生成的jar包包名和版本 jar { baseName = 'test' version = '0.1.0' } sourceCompatibility = 1.8 targetCompatibility = 1.8 buildscript { repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:1.5.4.RELEASE") } } repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral() } dependencies { compile("org.springframework.boot:spring-boot-starter-web:1.5.4.RELEASE") compile group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.4.0' testCompile 'junit:junit:4.12' testCompile('org.springframework.boot:spring-boot-starter-test:1.5.4.RELEASE') } ``` chromedriver自己准备好,我用的是2.30版本,目前来说的最新版。 java代码的测试用例如下: ``` package net.yuxianghe; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriverService; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.io.File; import java.util.ArrayList; import java.util.List; /** * chrome test * Created by hxy on 2017/7/6. */ public class ChromeDriverTest { @Test public void test1() throws Exception { File file = new File("/Users/hxy/soft/selenium/chrome_driver/2.30/chromedriver"); ChromeDriverService service = new ChromeDriverService.Builder().usingDriverExecutable(file) .usingAnyFreePort() .build(); service.start(); List<String> args = new ArrayList<>(); args.add("headless"); args.add("disable-gpu"); ChromeOptions options = new ChromeOptions(); options.addArguments(args); DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability(ChromeOptions.CAPABILITY, options); WebDriver driver = new RemoteWebDriver(service.getUrl(), capabilities); driver.get("http://www.tianyancha.com/company/22822"); Thread.sleep(20000); WebElement webElement = driver.findElement(By.className("base2017")); List<WebElement> webElementList = webElement.findElement(By.tagName("table")).findElement(By.tagName("tbody")).findElements(By.tagName("td")); if (CollectionUtils.isEmpty(webElementList)) { System.out.println("webElementList is empty"); } for (WebElement tdWebElement : webElementList) { String s = tdWebElement.getText(); s = StringUtils.trimAllWhitespace(s); if (!StringUtils.isEmpty(s)) { System.out.println(s); } } driver.quit(); service.stop(); } } ``` 使用chrome的无界模式顺手抓走了企业的基本信息,深藏功与名。不得不说和phantomjs比起来,chrome的headless模式要好用很多,所以赌一块钱phantomjs这个项目的使用人群很快会被拉走。 另外要多说一句,谷歌的官方说了: > Caution: Headless mode is available on Mac and Linux in Chrome 59. Windows support is coming in Chrome 60. To check what version of Chrome you have, open chrome://version. windows要等到60的版本才会支持headless模式,哈。
类型:工作
标签:headless,chrome,无界浏览器
Copyright © 雨翔河
我与我周旋久
独孤影
开源实验室