## 微软自动化神器【Playwright】(四)之 浏览器操作
在之前的文章中,我们介绍了 Playwright 的基本概念和安装方法。今天,我们将深入探讨 Playwright 中的浏览器操作,包括启动浏览器、管理页面、关闭浏览器等。
### 启动浏览器
Playwright 支持多种浏览器,包括 Chrome、Firefox 和 WebKit。以下代码展示了如何启动 Chrome 浏览器:
```javascript
const { chromium } = require('playwright'); // 导入 chromium 模块
(async () => {
const browser = await chromium.launch(); // 启动浏览器
// ... 其他操作
await browser.close(); // 关闭浏览器
})();
```
`launch()` 方法可以接受一些选项,例如浏览器版本、用户代理等:
```javascript
const browser = await chromium.launch({
headless: false, // 是否以无头模式运行
slowMo: 250, // 延迟执行,方便观察
args: ['--no-sandbox'], // 启动参数
});
```
### 管理页面
启动浏览器后,我们可以创建新的页面或获取已存在的页面。以下代码展示了如何创建新页面:
```javascript
const page = await browser.newPage(); // 创建新页面
// ... 对页面进行操作
await page.close(); // 关闭页面
```
我们也可以获取已存在的页面,例如第一个页面:
相关内容:
写在前面
今天是国庆节的最后一天,明天又要上班了,真的是感觉好像才开始放假一样,还是因为「失恋」没缓过来吗?我的国庆七天
第1天,当了近半天的司机,陪家人去各大超市去购物,下午在家躺·····第2-5天,重感冒,鼻涕不止,浑身酸痛乏力,两卷卫生纸下去,鼻子已经废了,真的是躺平了······第6天,打嗝不止,干咳、嗓子发炎肿了、鼻子烧了、嗓子基本说不出话了······综上,真的这个假期过的好累,算是大病一场吗?该做点什么
早上6点20醒了,刷了一集《请君》,觉得状态还不错,还是写点东西吧,也算找找状态吧。
Playwright之浏览器操作
基础参数
这系列的文章还要继续下去的,那么接下来要进行浏览器部分的操作了。1、创建浏览器对象
示例代码如下://默认为无头浏览器方式启动
browser = playwright.chromium().launch();
//参数设定方式启动
browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(true).setSlowMo(5000));
2、创建浏览器上下文
context = browser.newContext();
3、创建Page对象
一般来说,一个page对应一个浏览器选项卡,这点和selenium有点像,也可以说是比selenium分的更细致? 示例如下:page = context.newPage();
浏览操作
1、浏览器最大化
这里以chrome浏览器为例,示例代码如下: Playwright playwright = Playwright.create();
//看到某博主写的python版的加--start-maximized这个参数,本人尝试后发现无效(Mac系统)
//Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions()
// .setArgs(Collections.singletonList("--start-maximized"))
// .setHeadless(false));
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
browser.newContext(new Browser.NewContextOptions()
.setIgnoreHTTPSErrors(true)
.setJavaScriptEnabled(true)
.setViewportSize(2880, 1800));
Page page = browser.newPage();
page.navigate("https://www.cnblogs.com/longronglang");
System.out.println(page.title());
browser.close();
playwright.close();
2、多个浏览器启动
就是个浏览器的封装,没啥技术含量,示例代码如下:import com.microsoft.playwright.*;
import org.testng.annotations.Test;
/**
* @author rongrong
* @version 1.0
* @description 浏览器窗口操作
* @date 2022/10/7 2:21 PM
*/
public class TestBrowser {
/**
* 创建浏览器上下文
*
* @param browser
* @return
*/
public BrowserContext createContext(Browser browser) {
BrowserContext context = browser.newContext(new Browser.NewContextOptions()
.setIgnoreHTTPSErrors(true)
.setJavaScriptEnabled(true)
//此处可以理解为设定指定窗口启动
.setViewportSize(1980, 1080));
return context;
}
/**
* 创建浏览器
*
* @param name
* @param playwright
* @return
*/
public Browser createBrowser(String name, Playwright playwright) {
try {
switch (name) {
case "firefox":
return playwright.firefox().launch(new BrowserType.LaunchOptions().setHeadless(false).setTimeout(120 * 1000));
case "chromium":
return playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setTimeout(120 * 1000));
case "webkit":
return playwright.webkit().launch();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Test
public void testBrowser() {
//火狐浏览器
startBrowser("firefox");
//谷歌浏览器
startBrowser("chromium");
//这个浏览器不好使
//startBrowser("webkit");
}
/**
* 根据浏览器类型,启动浏览器
*
* @param browserName
*/
private void startBrowser(String browserName) {
//创建Playwright
Playwright playwright = Playwright.create();
//创建Browser(使用谷歌浏览器)
Browser browser = createBrowser(browserName, playwright);
//创建浏览器上下文
BrowserContext browserContext = createContext(browser);
Page page = browserContext.newPage();
page.navigate("https://www.cnblogs.com/longronglang");
System.out.println("page.title :" + page.title());
System.out.println(browserName + " 浏览器启动了!");
browser.close();
browserContext.close();
playwright.close();
}
}
效果如下:
3、前进/后退/刷新操作
示例代码如下: Playwright playwright = Playwright.create();
Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false));
browser.newContext(new Browser.NewContextOptions()
.setIgnoreHTTPSErrors(true)
.setJavaScriptEnabled(true)
.setViewportSize(2880, 1800));
Page page = browser.newPage();
page.navigate("https://www.cnblogs.com/longronglang");
//输出:久曲健 - 博客园
System.out.println("page title:"+page.title());
//这里是运行时打断点使用,方便调试(适用于喜欢用录制回放生成脚本的同学)
//page.pause();
pause(3);
//打开百度页面
page.navigate("https://www.baidu.com/");
//输出:百度一下,你就知道
System.out.println("page title:"+page.title());
//后退操作
page.goBack();
pause(3);
//输出:久曲健 - 博客园
System.out.println("page title:"+page.title());
//前进操作
page.goForward();
pause(3);
System.out.println("page title:"+page.title());
//刷新操作
page.reload();
pause(3);
//输出当前url
System.out.println("page url:"+page.url());
browser.close();
playwright.close();
效果如下:
写在最后
这个博客从上午九点多写到现在,表示很惭愧,大部分时间还是在刷手机,懒散坏了,想收收心,怕是真的很难!整个人还是不太好,因为打嗝不止,震的我脖子都疼,果然病痛确实很折磨人!看到很好的一句话分享给大家,也送给每个恋爱过程中朋友:分享如下:连回音都没有的山谷,不值得纵身一跃; 。「——知乎」