Chrome 特定功能

這些是 Google Chrome 瀏覽器特有的功能和特色。

預設情況下,Selenium 4 與 Chrome v75 及更高版本相容。請注意,Chrome 瀏覽器版本和 chromedriver 版本的主要版本必須相符。

選項

所有瀏覽器通用的功能都描述在選項頁面上。

Chrome 和 Chromium 獨有的功能記錄在 Google 的功能與 ChromeOptions頁面上

使用基本定義的選項啟動 Chrome 工作階段看起來像這樣

    ChromeOptions options = new ChromeOptions();
    driver = new ChromeDriver(options);
    options = webdriver.ChromeOptions()
    driver = webdriver.Chrome(options=options)
            var options = new ChromeOptions();
            driver = new ChromeDriver(options);
      options = Selenium::WebDriver::Options.chrome
      @driver = Selenium::WebDriver.for :chrome, options: options
    const Options = new Chrome.Options();
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(Options)
      .build();

參數

args 參數是用於瀏覽器啟動時要使用的一系列命令行開關。以下是兩個用於研究這些參數的絕佳資源

常用的 args 包括 --start-maximized--headless=new--user-data-dir=...

新增參數到選項

    options.addArguments("--start-maximized");
    options.add_argument("--start-maximized")
            options.AddArgument("--start-maximized");
      options.args << '--start-maximized'
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.addArguments('--headless=new'))
      .build();

在指定位置啟動瀏覽器

binary 參數接受要使用的瀏覽器替代位置路徑。透過此參數,您可以使用 chromedriver 來驅動各種基於 Chromium 的瀏覽器。

新增瀏覽器位置到選項

    options.setBinary(getChromeLocation());
    options.binary_location = chrome_bin
            options.BinaryLocation = GetChromeLocation();
      options.binary = chrome_location
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.setChromeBinaryPath(`Path to chrome binary`))
      .build();

新增擴充功能

extensions 參數接受 crx 檔案。至於未封裝的目錄,請改用 load-extension 參數,如這篇文章中所述。

新增擴充功能到選項

    options.addExtensions(extensionFilePath);
    options.add_extension(extension_file_path)
            options.AddExtension(extensionFilePath);
      options.add_extension(extension_file_path)
    const options = new Chrome.Options();
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.addExtensions(['./test/resources/extensions/webextensions-selenium-example.crx']))
      .build();

保持瀏覽器開啟

detach 參數設定為 true 將在程序結束後保持瀏覽器開啟,只要未向驅動程式發送 quit 命令。

注意:這已經是 Java 中的預設行為。

    options.add_experimental_option("detach", True)

注意:這已經是 .NET 中的預設行為。

      options.detach = true
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.detachDriver(true))
      .build();

排除參數

Chromedriver 有幾個預設參數用於啟動瀏覽器。如果您不希望新增這些參數,請將它們傳遞到 excludeSwitches。一個常見的範例是重新開啟彈出視窗封鎖程式。預設參數的完整列表可以從Chromium 原始碼中解析。

在選項上設定排除的參數

    options.setExperimentalOption("excludeSwitches", List.of("disable-popup-blocking"));
    options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])
            options.AddExcludedArgument("disable-popup-blocking");
      options.exclude_switches << 'disable-popup-blocking'
    let driver = new Builder()
      .forBrowser(Browser.CHROME)
      .setChromeOptions(options.excludeSwitches('enable-automation'))
      .build();

服務

有關建立預設 Service 物件,以及設定驅動程式位置和端口的範例,請參閱驅動程式服務頁面。

記錄輸出

取得驅動程式日誌對於偵錯問題很有幫助。Service 類別可讓您指定日誌的去向。除非使用者指示,否則記錄輸出會被忽略。

檔案輸出

若要變更記錄輸出以儲存到特定檔案

    ChromeDriverService service =
        new ChromeDriverService.Builder().withLogFile(logLocation).build();

注意:Java 也允許透過系統屬性設定檔案輸出
屬性鍵:ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
屬性值:表示日誌檔案路徑的字串

Selenium v4.11

    service = webdriver.ChromeService(log_output=log_path)
            service.LogPath = GetLogLocation();

主控台輸出

若要變更記錄輸出以在主控台中顯示為 STDOUT

Selenium v4.10

    ChromeDriverService service =
        new ChromeDriverService.Builder().withLogOutput(System.out).build();

注意:Java 也允許透過系統屬性設定主控台輸出;
屬性鍵:ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
屬性值:DriverService.LOG_STDOUTDriverService.LOG_STDERR

Selenium v4.11

    service = webdriver.ChromeService(log_output=subprocess.STDOUT)

$stdout$stderr 都是有效值

Selenium v4.10

      service.log = $stdout

記錄層級

有 6 個可用的記錄層級:ALLDEBUGINFOWARNINGSEVEREOFF。請注意,--verbose 等同於 --log-level=ALL,而 --silent 等同於 --log-level=OFF,因此此範例僅通用地設定記錄層級

Selenium v4.8

    ChromeDriverService service =
        new ChromeDriverService.Builder().withLogLevel(ChromiumDriverLogLevel.DEBUG).build();

注意:Java 也允許透過系統屬性設定記錄層級
屬性鍵:ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY
屬性值:ChromiumDriverLogLevel 列舉的字串表示形式

Selenium v4.11

    service = webdriver.ChromeService(service_args=['--log-level=DEBUG'], log_output=subprocess.STDOUT)

Selenium v4.10

      service.args << '--log-level=DEBUG'

記錄檔功能

有 2 個功能僅在記錄到檔案時可用

  • 附加日誌
  • 可讀的時間戳記

若要使用它們,您還需要明確指定日誌路徑和記錄層級。日誌輸出將由驅動程式而非程序管理,因此可能會看到細微的差異。

Selenium v4.8

    ChromeDriverService service =
        new ChromeDriverService.Builder().withAppendLog(true).withReadableTimestamp(true).build();

注意:Java 也允許透過系統屬性切換這些功能
屬性鍵:ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTYChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP
屬性值:"true""false"

    service = webdriver.ChromeService(service_args=['--append-log', '--readable-timestamp'], log_output=log_path)

Selenium v4.8

      service.args << '--append-log'
      service.args << '--readable-timestamp'

停用建置檢查

Chromedriver 和 Chrome 瀏覽器版本應相符,如果不相符,驅動程式將會錯誤。如果您停用建置檢查,您可以強制驅動程式與任何版本的 Chrome 一起使用。請注意,這是不受支援的功能,並且不會調查錯誤。

Selenium v4.8

    ChromeDriverService service =
        new ChromeDriverService.Builder().withBuildCheckDisabled(true).build();

注意:Java 也允許透過系統屬性停用建置檢查
屬性鍵:ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK
屬性值:"true""false"

Selenium v4.11

    service = webdriver.ChromeService(service_args=['--disable-build-check'], log_output=subprocess.STDOUT)
            service.DisableBuildCheck = true;

Selenium v4.8

      service.args << '--disable-build-check'

特殊功能

某些瀏覽器實作了它們獨有的其他功能。

投放

您可以驅動 Chrome Cast 裝置,包括共享分頁

    List<Map<String, String>> sinks = driver.getCastSinks();
    if (!sinks.isEmpty()) {
      String sinkName = sinks.get(0).get("name");
      driver.startTabMirroring(sinkName);
      driver.stopCasting(sinkName);
    }
        sinks = driver.get_sinks()
        if sinks:
            sink_name = sinks[0]['name']
            driver.start_tab_mirroring(sink_name)
            driver.stop_casting(sink_name)
      sinks = @driver.cast_sinks
      unless sinks.empty?
        device_name = sinks.first['name']
        @driver.start_cast_tab_mirroring(device_name)
        expect { @driver.stop_casting(device_name) }.not_to raise_exception
      end

網路條件

您可以模擬各種網路條件。

    ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions();
    networkConditions.setOffline(false);
    networkConditions.setLatency(java.time.Duration.ofMillis(20)); // 20 ms of latency
    networkConditions.setDownloadThroughput(2000 * 1024 / 8); // 2000 kbps
    networkConditions.setUploadThroughput(2000 * 1024 / 8);   // 2000 kbps

    ((ChromeDriver) driver).setNetworkConditions(networkConditions);
    network_conditions = {
        "offline": False,
        "latency": 20,  # 20 ms of latency
        "download_throughput": 2000 * 1024 / 8,  # 2000 kbps
        "upload_throughput": 2000 * 1024 / 8,    # 2000 kbps
    }
    driver.set_network_conditions(**network_conditions)
      @driver.network_conditions = {offline: false, latency: 100, throughput: 200}

日誌

    LogEntries logs = driver.manage().logs().get(LogType.BROWSER);
    logs = driver.get_log("browser")
      logs = @driver.logs.get(:browser)

權限

    driver.setPermission("camera", "denied");
    driver.set_permissions('camera', 'denied')
      @driver.add_permission('camera', 'denied')
      @driver.add_permissions('clipboard-read' => 'denied', 'clipboard-write' => 'prompt')

DevTools

有關使用 Chrome DevTools 的更多資訊,請參閱Chrome DevTools 章節