at backyard

Color my life with the chaos of trouble.

Playwright for Goで指定した場所にスクロールさせる方法

昨日に引き続き、Playwright for Goに関する個人的な備忘録。

Playwright for Goで指定した場所にスクロールさせる方法だが、playwright.LocatorScrollIntoViewIfNeeded というメソッドが用意されているのでこれを利用する。

実際のサンプルを下に記載したが、わざわざサンプルを記載するほどのこともないぐらい簡単。

package main

import (
    "log"
    "time"

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

func main() {
    // Playwright用にブラウザを新たにインストールはせず、既にインストールされているChromeを利用する
    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"),
        Headless: playwright.Bool(false),
    }

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

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

    if _, err = page.Goto("https://playwright-community.github.io/playwright-go/"); err != nil {
        log.Fatalf("could not goto: %v", err)
    }

    moreExamples, err := page.Locator("#more-examples")
    if err != nil {
        log.Fatalf("could not get input form: %v", err)
    }

    // 対象の場所までスクロールする
    if err := moreExamples.ScrollIntoViewIfNeeded(); err != nil {
        log.Fatalf("scroll error: %v", err)
    }

    // 3秒待機
    time.Sleep(time.Duration(3 * time.Second))

    log.Println("Finish!")
}

以前Seleniumを利用していた際は、スクロール処理を書くのに JavsScript 経由で実現させていたが、このようなメソッドが組み込まれているのは非常に楽。