前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Playwright 源码 BrowserType

Playwright 源码 BrowserType

原创
作者头像
华健课堂
发布2024-09-06 10:19:00
990
发布2024-09-06 10:19:00

playwright-java 的 Browser、BrowserContext、Page 挺好理解的,唯独这厮,就有一丢丢 ……

代码语言:java
复制
package com.microsoft.playwright;

/**
 * BrowserType provides methods to launch a specific browser instance or connect to an existing one. 
 *
 * BrowserType 提供启动一个特定浏览器或连接到一个已存在浏览器的方法。
 */
public interface BrowserType {

  // 启动浏览器 返回浏览器实例
  Browser launch(LaunchOptions options);
  
  // 通过 Chrome DevTools Protocol 连接已存在的浏览器 
  Browser connectOverCDP(String endpointURL, ConnectOverCDPOptions options);
  
  // 返回浏览器名 例如 chromium webkit firefox
  String name();
  
  // 返回可执行的浏览器路径
  String executablePath();
 
  // ...
  
}

调试以下代码,可看出:

BrowserType 不是简单直译地表示浏览器类型,而是表示带有浏览器类型和浏览器可执行路径,用来启动或连接已启动浏览器的类。

代码语言:java
复制
package demo;
import com.microsoft.playwright.*;

import java.util.Arrays;
import java.util.List;

public class Demo {
  public static void main(String[] args) {
    try(Playwright playwright = Playwright.create()) {
      // 三个 BrowserType
      List<BrowserType> browserTypes = Arrays.asList(
              playwright.chromium(),
              playwright.webkit(),
              playwright.firefox()
      );
      BrowserType.LaunchOptions launchOptions = new BrowserType.LaunchOptions().setHeadless(false);
      // 遍历
      for (BrowserType browserType : browserTypes) {
        // 启动浏览器
        try (Browser browser = browserType.launch(launchOptions)) {
          BrowserContext context = browser.newContext();
          Page page = context.newPage();
          page.navigate("https://localhost/");
        }
      }
    }
  }
}

好了,那上图的 initializer 从何而来?又要到哪里去?

一条重要的线索,渐渐浮出水面 ……

翻过这座山,越过那片海;给下面的方法都加断点,相信,上下而求索的你,终将找到真相 ……

  • com.microsoft.playwright.impl.PlaywrightImpl#createImpl
  • com.microsoft.playwright.impl.ReaderThread#run
  • com.microsoft.playwright.impl.ChannelOwner#runUntil
  • com.microsoft.playwright.impl.Connection#processOneMessage
  • com.microsoft.playwright.impl.Connection#createRemoteObject
  • com.microsoft.playwright.impl.PlaywrightImpl#PlaywrightImpl

Huajianketang would climb every mountain, and swim every ocean, just to find you.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档