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)
参数 | 参数类型 | 说明 | 实例 |
---|---|---|---|
url | String | 跳转地址 | http://www.baidu.com |
isBlock | boolean | 是否阻塞,不阻塞代表只是发导航命令出去,并不等待导航结果,同时也不会抛异常 | true / false |
options | PageNavigateOptions | PageNavigateOptions 对象 | 示例参考下一个表格 |
PageNavigateOptions 对象
参数 | 参数类型 | 说明 |
---|---|---|
timeout | int | 跳转等待时间,单位是毫秒, 默认是30秒, 传 0 表示无限等待。 可以通过page.setDefaultNavigationTimeout(timeout)方法修改默认值 |
waitUntil | List | 满足什么条件认为页面跳转完成,默认是 load 事件触发时。 指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括: 1、load - 页面的load事件触发时 2、domcontentloaded - 页面的 DOMContentLoaded 事件触发时 3、networkidle0 - 不再有网络连接时触发(至少500毫秒后) 4、networkidle2 - 只有2个网络连接时触发(至少500毫秒后) |
referer | String | Referer标头值。如果提供,它将优先于page.setExtraHTTPHeaders()设置的referer标头值。 |
2. click()方法
此方法主要是对页面元素进行点击操作
- click(String selector)
- click(String selector,boolean isBlock)
- click(String selector, ClickOptions options,boolean isBlock)
参数 | 参数类型 | 说明 | 实例 |
---|---|---|---|
selector | String | 选择器 | “.app” |
isBlock | boolean | 是否是阻塞的,为true代表阻塞,为false代表不阻塞,不阻塞可以配合waitForNavigate(下一参数为此方法) | true / false |
waitForNavigation() | 方法 | 此方法在页面跳转到一个新地址或重新加载时解析,如果你的代码会间接引起页面跳转,这个方法比较有用 比如你在在代码中使用了Page.click()方法,引起了页面跳转 | |
options | ClickOptions | ClickOptions 对象 | 示例参考下一个表格 |
ClickOptions 对象
参数 | 参数类型 | 说明 |
---|---|---|
delay | int | 延时时间 |
button | String | “left”|“right”|“middle” 三种选择 |
clickCount | int | 点击次数 |
3. $()方法
此方法主要是获取页面指定选择器的元素
$(String selector):获取单个选择器,没获取到则返回null
$$(String selector):获取页面内所有选择器元素,没获取到则返回[](空数组)
- $(String selector)
- $$(String selector)
参数 | 参数类型 | 说明 |
---|---|---|
selector | String | 选择器, |
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)
参数 | 参数类型 | 说明 | 参数示例 |
---|---|---|---|
selector | String | 选择器 | “.app”,“#app” |
pageFunction | String | 获取选择器之后执行的js脚本,需要将脚本转为String类型 return之后可以将数据返回到java变量中 function(param)中的param,也是第一个参数为选择器获取到的html格式的dom | function(param){ console.log(param); return param; } |
args | List | 传入脚本的参数 |
5. type()方法
该方法用于给输入框设置值
- type(String selector,String text)
- type(String selector,String text,int delay)
参数 | 参数类型 | 说明 |
---|---|---|
text | String | 字符串类型参数 |
selector | String | 选择器,id选择器或class选择器 |
selector | int | 延迟时间,单位ms,默认为0 |
6. evaluate()方法
该方法用于执行js脚本
- evaluate(String pageFunction)
- evaluate(String pageFunction,List args)
参数 | 参数类型 | 说明 |
---|---|---|
pageFunction | String | js脚本,使用字符串类型 function(param)中的param,也是第一个参数为选择器获取到的html格式的dom |
args | List | 传入js脚本的参数 |
7. evaluateHandle()方法
该方法用于执行js脚本,此方法和 page.evaluate 的唯一区别是此方法返回的是页内类型(JSHandle)
- evaluateHandle(String pageFunction)
- evaluateHandle(String pageFunction,List args)
参数 | 参数类型 | 说明 |
---|---|---|
pageFunction | String | js脚本,使用字符串类型 function(param)中的param,也是第一个参数为选择器获取到的html格式的dom |
args | List | 传入js脚本的参数 |
3、Jvppeteer对象
1)、ClickOptions 对象
page.click()方法中作为参数传入
参数 | 参数类型 | 说明 |
---|---|---|
delay | int | 延时时间 |
button | String | “left”|“right”|“middle” 三种选择 |
clickCount | int | 点击次数 |
2)、PageNavigateOptions 对象
page.goTo()方法中作为参数传入
参数 | 参数类型 | 说明 |
---|---|---|
timeout | int | 跳转等待时间,单位是毫秒, 默认是30秒, 传 0 表示无限等待。 可以通过page.setDefaultNavigationTimeout(timeout)方法修改默认值 |
waitUntil | List | 满足什么条件认为页面跳转完成,默认是 load 事件触发时。 指定事件数组,那么所有事件触发后才认为是跳转完成。事件包括: 1、load - 页面的load事件触发时 2、domcontentloaded - 页面的 DOMContentLoaded 事件触发时 3、networkidle0 - 不再有网络连接时触发(至少500毫秒后) 4、networkidle2 - 只有2个网络连接时触发(至少500毫秒后) |
referer | String | Referer标头值。如果提供,它将优先于page.setExtraHTTPHeaders()设置的referer标头值。 |
3)、Viewport对象
new LaunchOptionsBuilder().withViewport()中作为参数传入withViewport()方法中
参数 | 参数类型 | 说明 |
---|---|---|
width | int | 页面宽度像素 |
height | int | 页面高度像素 |
deviceScaleFactor | Number | 设置设备的缩放(可以认为是 dpr)。默认是 1 |
isMobile | boolean | 是否在页面中设置了 meta viewport 标签。默认是 false |
hasTouch | boolean | 指定viewport是否支持触摸事件。默认是 false |
isLandscape | boolean | 指定视口是否处于横向模式。默认是 false |