Java爬虫框架:Jvppeteer,java也可以使用爬虫哟

1 篇文章 0 订阅

Jvppeteer通过DevTools控制 Chromium 或 Chrome。
默认情况下,以headless模式运行,也可以通过配置运行’有头’模式。

想学习更多,请关注个人微信GZH:Magic全靠想象

1、Jvppeteer通过maven引入

<dependency>
    <groupId>io.github.fanyong920</groupId>
    <artifactId>jvppeteer</artifactId>
    <version>1.1.3</version>
</dependency>

2、Jvppeteer的初步使用

1)、跳转页面

try {
    //自动下载,第一次下载后不会再下载
    BrowserFetcher.downloadIfNotExist(null);
    ArrayList<String> argList = new ArrayList<>();
    // withHeadless 是否开启无头模式,无头模式不会显示浏览器
    LaunchOptions options = new LaunchOptionsBuilder().withArgs(argList).withHeadless(false).build();
    argList.add("--no-sandbox");
    argList.add("--disable-setuid-sandbox");
    Browser browser = Puppeteer.launch(options);


    Page page = browser.newPage();
    page.goTo("https://www.baidu.com/");
    browser.close();
}catch(Exception e){
    e.printStackTrace();
}

2)、使用page对象操作页面

1. goto()方法
此方法主要用于进行页面跳转
  • goTo(String url)
  • goTo(String url, boolean isBlock)
  • goTo(String url, PageNavigateOptions options)
  • goTo(String url, PageNavigateOptions options,boolean isBlock)

参数参数类型说明实例
urlString跳转地址http://www.baidu.com
isBlockboolean是否阻塞,不阻塞代表只是发导航命令出去,并不等待导航结果,同时也不会抛异常true / false
optionsPageNavigateOptionsPageNavigateOptions 对象示例参考下一个表格

PageNavigateOptions 对象

参数参数类型说明
timeoutint跳转等待时间,单位是毫秒, 默认是30秒, 传 0 表示无限等待。
可以通过page.setDefaultNavigationTimeout(timeout)方法修改默认值
waitUntilList满足什么条件认为页面跳转完成,默认是 load 事件触发时。
指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括:
1、load - 页面的load事件触发时
2、domcontentloaded - 页面的 DOMContentLoaded 事件触发时
3、networkidle0 - 不再有网络连接时触发(至少500毫秒后)
4、networkidle2 - 只有2个网络连接时触发(至少500毫秒后)
refererStringReferer标头值。如果提供,它将优先于page.setExtraHTTPHeaders()设置的referer标头值。
2. click()方法
此方法主要是对页面元素进行点击操作
  • click(String selector)
  • click(String selector,boolean isBlock)
  • click(String selector, ClickOptions options,boolean isBlock)
参数参数类型说明实例
selectorString选择器“.app”
isBlockboolean是否是阻塞的,为true代表阻塞,为false代表不阻塞,不阻塞可以配合waitForNavigate(下一参数为此方法)true / false
waitForNavigation()方法此方法在页面跳转到一个新地址或重新加载时解析,如果你的代码会间接引起页面跳转,这个方法比较有用

比如你在在代码中使用了Page.click()方法,引起了页面跳转
注意 通过 History API 改变地址会认为是一次跳转。

optionsClickOptionsClickOptions 对象示例参考下一个表格

ClickOptions 对象

参数参数类型说明
delayint延时时间
buttonString“left”|“right”|“middle” 三种选择
clickCountint点击次数
3. $()方法
此方法主要是获取页面指定选择器的元素

$(String selector):获取单个选择器,没获取到则返回null

$$(String selector):获取页面内所有选择器元素,没获取到则返回[](空数组)

  • $(String selector)
  • $$(String selector)
参数参数类型说明
selectorString选择器,
4. $eval()方法
此方法主要是获取页面指定选择器的元素之后执行指定方法
  • $eval(String selector, String pageFunction)
  • $eval(String selector, String pageFunction, List args)
  • $$eval(String selector, String pageFunction)
  • $$eval(String selector, String pageFunction, List args)
参数参数类型说明参数示例
selectorString选择器“.app”,“#app”
pageFunctionString获取选择器之后执行的js脚本,需要将脚本转为String类型
return之后可以将数据返回到java变量中
function(param)中的param,也是第一个参数为选择器获取到的html格式的dom
function(param){
console.log(param);
return param;
}
argsList传入脚本的参数
5. type()方法
该方法用于给输入框设置值
  • type(String selector,String text)
  • type(String selector,String text,int delay)
参数参数类型说明
textString字符串类型参数
selectorString选择器,id选择器或class选择器
selectorint延迟时间,单位ms,默认为0
6. evaluate()方法
该方法用于执行js脚本
  • evaluate(String pageFunction)
  • evaluate(String pageFunction,List args)
参数参数类型说明
pageFunctionStringjs脚本,使用字符串类型
function(param)中的param,也是第一个参数为选择器获取到的html格式的dom
argsList传入js脚本的参数
7. evaluateHandle()方法
该方法用于执行js脚本,此方法和 page.evaluate 的唯一区别是此方法返回的是页内类型(JSHandle)
  • evaluateHandle(String pageFunction)
  • evaluateHandle(String pageFunction,List args)
参数参数类型说明
pageFunctionStringjs脚本,使用字符串类型
function(param)中的param,也是第一个参数为选择器获取到的html格式的dom
argsList传入js脚本的参数

3、Jvppeteer对象

1)、ClickOptions 对象

page.click()方法中作为参数传入

参数参数类型说明
delayint延时时间
buttonString“left”|“right”|“middle” 三种选择
clickCountint点击次数
2)、PageNavigateOptions 对象

page.goTo()方法中作为参数传入

参数参数类型说明
timeoutint跳转等待时间,单位是毫秒, 默认是30秒, 传 0 表示无限等待。
可以通过page.setDefaultNavigationTimeout(timeout)方法修改默认值
waitUntilList满足什么条件认为页面跳转完成,默认是 load 事件触发时。
指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括:
1、load - 页面的load事件触发时
2、domcontentloaded - 页面的 DOMContentLoaded 事件触发时
3、networkidle0 - 不再有网络连接时触发(至少500毫秒后)
4、networkidle2 - 只有2个网络连接时触发(至少500毫秒后)
refererStringReferer标头值。如果提供,它将优先于page.setExtraHTTPHeaders()设置的referer标头值。
3)、Viewport对象

new LaunchOptionsBuilder().withViewport()中作为参数传入withViewport()方法中

参数参数类型说明
widthint页面宽度像素
heightint页面高度像素
deviceScaleFactorNumber设置设备的缩放(可以认为是 dpr)。默认是 1
isMobileboolean是否在页面中设置了 meta viewport 标签。默认是 false
hasTouchboolean指定viewport是否支持触摸事件。默认是 false
isLandscapeboolean指定视口是否处于横向模式。默认是 false
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值