微軟出品自動化神器Playwright(Playwright+Java)系列(四) 之 瀏覽器操作

2022-10-07 21:01:06

寫在前面

今天是國慶節的最後一天,明天又要上班了,真的是感覺好像才開始放假一樣,還是因為失戀沒緩過來嗎?

我的國慶七天

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

效果如下:

到此,關於瀏覽器的操作部分已分享完畢,有興趣的同學可以自行嘗試,更多請參考官方檔案。

寫在最後

這個部落格從上午九點多寫到現在,表示很慚愧,大部分時間還是在刷手機,懶散壞了,想收收心,怕是真的很難!

整個人還是不太好,因為打嗝不止,震的我脖子都疼,果然病痛確實很折磨人!

看到很好的一句話分享給大家,也送給每個戀愛過程中朋友:

分享如下:

連回音都沒有的山谷,不值得縱身一躍;
——知乎