上一篇:Java网络爬虫实操(6)
大家好,我们平常浏览网页经常会看到这样的效果:鼠标滚动到差不多底部的时候,才会加载新内容出来。然后一直滚就一直加载,比如外卖平台上的评价信息、社交平台上的跟贴等等。
本篇文章介绍如何用seleinum技术模拟人对浏览器的操作
1) 准备工作
- 更新爬虫框架NetDiscovery,我们基于框架进行演示
- 下载对应的浏览器driver程序,比如chrome的chromedriver,官方下载,镜像下载
- 注意:driver程序一定要和浏览器版本匹配,建议直接装最新的chrome和chromedriver(当前最新版本是2.36),如果是其他浏览器的话,也一样的
-
目标:打开一个网页窗口,显示内容并最大化,往下拉后加载出新的内容,最终对当前网页截屏,在本地生成一个图像文件
2) 程序实现逻辑
- 根据浏览器类型创建相应的对象new ChromeDriver(),并附上相应的action
- 通过chromedriver驱动程序打开本地的chrome浏览器
- 用内置的js方法window.scrollBy()模拟人下拉网页的操作
- 用driver自带的getScreenshotAs()实现对网页截图
3) 写代码
Main类
package com.cv4j.netdiscovery.example;
import com.cv4j.netdiscovery.core.Spider;
import com.cv4j.netdiscovery.selenium.Browser;
import com.cv4j.netdiscovery.selenium.downloader.SeleniumDownloader;
import org.openqa.selenium.WebDriver;
public class TestSelenium {
public static void main(String[] args) {
//设置浏览器的驱动程序
WebDriver driver = Browser.Chrome.init("example/chromedriver.exe");
//创建downloader类和action
ScrollAction scrollAction = new ScrollAction();
SeleniumDownloader seleniumDownloader = new SeleniumDownloader(driver, scrollAction);
//设置并启动爬虫
Spider.create()
.name("testseleinum")
.url("https://www.ele.me/shop/1919756/rate")
.downloader(seleniumDownloader)
.run();
}
}
SeleniumAction类
package com.cv4j.netdiscovery.example;
import com.cv4j.netdiscovery.selenium.SeleniumAction;
import com.cv4j.netdiscovery.selenium.Utils;
import org.openqa.selenium.WebDriver;
public class ScrollAction implements SeleniumAction {
@Override
public void execute(WebDriver driver) {
try {
//最大化
driver.manage().window().maximize();
//停顿2秒
Thread.sleep(2000);
//往下滚动200px
Utils.scroll(driver, 200);
//对当前网页截屏
Utils.taskScreenShot(driver, "D:\\work\\test.png");
} catch(InterruptedException e) {
}
}
}
执行结果
4) 总结
seleinum本质上是一种自动化测试工具,在爬虫技术中主要用来模拟人对浏览器的操作,理论上人通过鼠标键盘操作的所有过程,都可以用程序代码模拟出来,然后获取我们想要的网页数据。
试用下来发现NetDiscovery框架对seleinum操作的支持还比较简单,我会继续关注。
下一篇:Java网络爬虫实操(8)
网友评论