at backyard

Color my life with the chaos of trouble.

Playwright for GoでローカルのChromeを利用して実行する方法

Playwrightではデフォルトでの実行の場合、別途Playwrightで利用するためのブラウザをインストールしてそちらを利用するようになっている。

もし手元のChromeから実行したい場合、下記のようにしてインストールをスキップし、かつて元のマシンのChromeを参照して処理を行える。
(コードの大半はPlaywright for GoのREADMEに書かれているサンプルとなっている)

package main

import (
    "fmt"
    "log"

    "github.com/playwright-community/playwright-go"
)

func main() {
    runOption := &playwright.RunOptions{
        SkipInstallBrowsers: true,
    }

    // ここでPlaywrightのDriverのインストールを実施する
    // なお2回目以降はすでにDriverはインストールされているため、この処理はスキップ可能
    err := playwright.Install(runOption)
    if err != nil {
        log.Fatalf("could not install playwright dependencies: %v", err)
    }

    pw, err := playwright.Run()
    if err != nil {
        log.Fatalf("could not start playwright: %v", err)
    }

    option := playwright.BrowserTypeLaunchOptions{
        Channel: playwright.String("chrome"),
    }

    browser, err := pw.Chromium.Launch(option)
    if err != nil {
        log.Fatalf("could not launch browser: %v", err)
    }

    page, err := browser.NewPage()
    if err != nil {
        log.Fatalf("could not create page: %v", err)
    }

    if _, err = page.Goto("https://news.ycombinator.com"); err != nil {
        log.Fatalf("could not goto: %v", err)
    }

    entries, err := page.QuerySelectorAll(".athing")
    if err != nil {
        log.Fatalf("could not get entries: %v", err)
    }

    for i, entry := range entries {
        titleElement, err := entry.QuerySelector("td.title > a")
        if err != nil {
            log.Fatalf("could not get title element: %v", err)
        }

        title, err := titleElement.TextContent()
        if err != nil {
            log.Fatalf("could not get text content: %v", err)
        }

        fmt.Printf("%d: %s\n", i+1, title)
    }

    if err = browser.Close(); err != nil {
        log.Fatalf("could not close browser: %v", err)
    }

    if err = pw.Stop(); err != nil {
        log.Fatalf("could not stop Playwright: %v", err)
    }
}

Playwright経由でインストールしたブラウザの削除について

ちなみに誤ってPlaywirhgt経由でChromiumをインストールしてしまった場合、下記のドキュメントに記載されているパス内のブラウザバイナリを直接削除することで対応可能。
この方法が推奨されているかどうかはわからないが、自分の環境では特に問題は起きていない。
(まあ、ブラウザのバイナリを削除するだけなので、特に問題なさそうかなと...)

https://playwright.dev/docs/browsers#managing-browser-binaries