selenium和browsermob简易爬虫
- 简单介绍selenium和browsermob
- 环境搭建
- demo编写
- 总结
简单介绍selenium和browsermob
首先介绍一下selenium和browsermob这两个东西。selenium这个东西是模拟浏览器操作的,最重要的是可以模拟鼠标点击和键盘输入的操作,甚至还可以操作浏览器的窗口和设置,还可以定义运行js。
browsermob这个东西是用来抓取http请求和响应的,主要是应为selenium只能获取到页面的pageSource(就是页面内的东西)。
环境搭建
首先我这儿使用的是jdk1.8,还有就是使用的maven支持做的项目架构。
不多说,看依赖
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>net.lightbody.bmp</groupId>
<artifactId>browsermob-core</artifactId>
<version>2.1.5</version>
</dependency>
我这儿没有使用最新版本的selenium,你们可以去试试最新的,但是我这版本是没有问题的。
注意:你还得去下载selenium操作浏览器的驱动
我这个列出两个:火狐浏览器驱动下载谷歌浏览器驱动下载注意:这个驱动版本跟你安装的浏览器版本是对应的,下载过后解压到你指定的文件夹就行,待会呀要使用到这个东西,只需要一个文件路径。
demo编写
废话不多说,直接上代码
System.setProperty("webdriver.gecko.driver", "D:\\drvier\\geckodriver.exe");//这个就是你驱动的文件地址了
BrowserMobProxy browserMobProxy = new BrowserMobProxyServer();
browserMobProxy.start();
Proxy seleniumProxy = ClientUtil.createSeleniumProxy(browserMobProxy);
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setProxy(seleniumProxy);
firefoxOptions.setHeadless(true);
firefoxOptions.setAcceptInsecureCerts(true);
FirefoxDriver firefoxDriver = new FirefoxDriver(firefoxOptions);//我是用的是火狐的浏览器
browserMobProxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);
browserMobProxy.setHarCaptureTypes(CaptureType.RESPONSE_CONTENT);
browserMobProxy.newHar("自己指定一个名字,随便写");
firefoxDriver.manage().window().maximize();
//firefoxDriver.manage().deleteAllCookies();
// 与浏览器同步非常重要,必须等待浏览器加载完毕
firefoxDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
firefoxDriver.get("你要去爬取得url");
WebDriver.Options manage = firefoxDriver.manage();
manage.addCookie(bduss);
Thread.sleep(3000);
firefoxDriver.navigate().refresh();
String pageSource = firefoxDriver.getPageSource();//获取页面数据
System.out.println("pageSource-->" + pageSource);
String title = firefoxDriver.getTitle();//获取标题
System.out.println("title-->" + title);
Set<Cookie> cookies = manage.getCookies();//获取cookie
for (Cookie cookie : cookies) {
System.out.println("cookie-->" + cookie.getName() + "::" + cookie.getValue());
}
Thread.sleep(4000);
WebElement elementByClassName = firefoxDriver.findElementByClassName("你想要获取的class标签");
elementByClassName.click(); //模拟鼠标点击事件
System.out.println("--------------------------");
Har har = browserMobProxy.getHar();
for (HarEntry entry : har.getLog().getEntries()) {//这儿就是获取所有的请求响应的数据
HarResponse response = entry.getResponse();
HarRequest request = entry.getRequest();
if(request.getUrl().contains("/download"))
System.out.println("我出来了");
HarContent content = response.getContent();
String text = content.getText();//这个是拿到响应的body,就是你想要的json数据了
System.out.println("text-->-->"+text);
}
System.out.println("--------------------------");
String pageSource1 = firefoxDriver.getPageSource();
System.out.println(pageSource1);
Thread.sleep(200);
String pageSource2 = firefoxDriver.getPageSource();
System.out.println(pageSource2);
Thread.sleep(5000);
总结
selenium这个东西本身是用来做自动化测试和检测的,但是用来爬取东西也很方便,可以绕过很多网站反爬虫的机制,反正就是很简单,selenium的api还有很多,功能也很强大,可以去了解一下。