首页 > 编程语言 >微软出品自动化神器Playwright(Playwright+Java)系列(四) 之 浏览器操作

微软出品自动化神器Playwright(Playwright+Java)系列(四) 之 浏览器操作

时间:2022-10-07 18:33:20浏览次数:58  
标签:playwright 浏览器 title Playwright Java page browser

写在前面

今天是国庆节的最后一天,明天又要上班了,真的是感觉好像才开始放假一样,还是因为失恋没缓过来吗?

我的国庆七天

第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();

效果如下:

到此,关于浏览器的操作部分已分享完毕,有兴趣的同学可以自行尝试,更多请参考官方文档。

写在最后

这个博客从上午九点多写到现在,表示很惭愧,大部分时间还是在刷手机,懒散坏了,想收收心,怕是真的很难!

整个人还是不太好,因为打嗝不止,震的我脖子都疼,果然病痛确实很折磨人!

看到很好的一句话分享给大家,也送给每个恋爱过程中朋友:

分享如下:

连回音都没有的山谷,不值得纵身一跃;
——知乎

标签:playwright,浏览器,title,Playwright,Java,page,browser
From: https://www.cnblogs.com/longronglang/p/16760234.html

相关文章

  • Java线程安全之synchronized 与 lock的异同
    *synchronized与lock的异同?*相同:二者都可以解决线程安全问题*不同:synchronized机制再执行完相应的同步代码以后,自动的释放同步监视器*Lock需要手动的启动同步(lo......
  • Caused by: java.lang.IllegalStateException: Detec
    SLF4J:Detectedbothlog4j-over-slf4j.jarANDslf4j-log4j12.jarontheclasspath,preemptingStackOverflowError.SLF4J:Seealso​​​http://www.slf4j.org/cod......
  • 捕获Java线程池执行任务抛出的异常
    捕获Java线程池执行任务抛出的异常Java中线程执行的任务接口java.lang.Runnable要求不抛出Checked异常,publicinterfaceRunnable{publicabstractvoidrun();......
  • java tempalte
    //javaservicepackagetx.txservice.service;importcom.baomidou.mybatisplus.core.conditions.query.QueryWrapper;importjava.util.List;publicinterfaceTem......
  • hive元起动报错:Exception in thread "main" java.lang.NoSuchMethodError: com.google
    错误原因:1.系统找不到这个类所在的jar包2.jar包的版本不一样系统不知道使用哪个。 hive启动报错的原因是后者解决办法:1、com.google.common.base.Preconditions.che......
  • Java实现rtrim功能,批量删除字符串指定末尾的字符串
    publicstaticStringremoveEndLoop(Stringstr,Stringremove){if(StringUtils.isBlank(str)||StringUtils.isBlank(remove)){returnstr;}......
  • java--equals和==用法
    //引用类型不能用相等于==去比较,引用类型都是在堆内存,比较的是地址值,所以用equals数组是引用类型,不能使用==去比较//基本数据类型用==去比较1、equals是object的方法......
  • JavaScript 学习-49.localStorage前端保存数据
    前言localstorage在浏览器的API有两个:localStorage和sessionStorage存在于window对象中:localStorage对应window.localStorage,sessionStorage对应window.sessio......
  • 从0到1掌握Java全栈小程序开发,玩转微信生态
    从0到1掌握Java全栈小程序开发,玩转微信生态Java :Java基础JDBC基础Java集合Java多线程系列JUC系列JavaIO基础JavaCore:Java虚拟机系列JVM虚拟机监控及性能......
  • Java修饰词
    一到学校感觉写点博客随笔的时间和机会就少了,最近开了Java课程,趁着线上金工实习啥也不想听还不如写点笔记,毕竟逸一时,误一世捏。首先学过的都知道,Java是一种面向对象编程(O......