Go로 웹사이트 스크린샷 찍는 방법

21414 단어 playwrightgo
현재 Go로 모든 URL의 스크린샷을 만들 수 있는 많은 옵션이 있습니다.
  • Go용 Selenium WebDriver 클라이언트.
  • Puppeteer의 Go 아날로그를 사용할 수 있습니다.
  • 극작가 라이브러리.
  • 또는 Screenshot API를 서비스로 제공합니다.

  • 겹칠 수 있지만 최상의 솔루션은 없습니다. 각각은 사용 사례와 요구 사항에 따라 다릅니다.

    Go용 Selenium WebDriver 클라이언트



    Selenium은 QA 자동화 영역에서 잘 알려진 아이이므로 자동화 테스트를 작성할 계획이거나 이미 수행하고 있는 경우 스크린샷 촬영을 시작하기 쉽습니다.

    프로젝트에 Selenium WebDriver client for Go을 설치합니다.

    go get github.com/tebeka/selenium
    


    최신 버전ChromeDriver 및 최신 버전remote Selenium WebDriver standalone server을 다운로드하고 동일한 소스 디렉토리에 배치하면 바로 사용할 수 있습니다.

    package main
    
    import (
        "fmt"
        "os"
    
        "github.com/tebeka/selenium"
    )
    
    func main() {
        const (
            seleniumPath     = "./selenium-server-standalone-3.5.3.jar"
            chromeDriverPath = "./chromedriver"
            port             = 8080
        )
        opts := []selenium.ServiceOption{
            selenium.ChromeDriver(chromeDriverPath),
            selenium.Output(os.Stderr),
        }
        selenium.SetDebug(true)
        service, err := selenium.NewSeleniumService(seleniumPath, port, opts...)
        if err != nil {
            panic(err) // panic is used only as an example and is not otherwise recommended
        }
        defer service.Stop()
    
        // connect to the WebDriver instance running locally
        caps := selenium.Capabilities{"browserName": "chrome"}
        wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
        if err != nil {
            panic(err)
        }
        defer wd.Quit()
    
        if err := wd.Get("https://scalabledeveloper.com"); err != nil {
            panic(err)
        }
    
        screenshot, err := wd.Screenshot()
        if err != nil {
            panic(err)
        }
    
        out, err := os.Create("scalabledeveloper.jpg")
        if err != nil {
            panic(err)
        }
        defer out.Close()
    
        _, err = out.Write(screenshot)
        if err != nil {
            panic(err)
        }
    }
    


    로컬에서 한두 개의 스크린샷만 찍고 싶다면 Selenium WebDriver 클라이언트가 적합하지 않습니다. 이전에 작성한 것처럼 이미 Selenium으로 자동화 테스트를 작성했거나 작성할 계획인 경우 더 유용합니다.

    Puppeteer의 아날로그 이동



    chromedp은 Go의 Node.js Puppeteer과 가장 유사하며 외부 종속성 없이 Go의 Chrome DevTools Protocol을 지원하는 브라우저를 구동하는 더 빠르고 간단한 방법입니다.

    자동화 테스트에 chromedp를 사용할 수도 있지만 Selenium보다 훨씬 가볍고 간단하며 브라우저를 통한 모든 자동화가 가능합니다. 브라우저에서 수동으로 수행할 수 있는 모든 작업은 chromedp로도 수행할 수 있습니다.

    사용하기 매우 쉽습니다.

    go get github.com/chromedp/chromedp
    


    그런 다음:

    func main() {
        ctx, cancel := chromedp.NewContext(context.Background())
        defer cancel()
    
        var buf []byte
        if err := chromedp.Run(ctx,
            chromedp.Navigate(`https://example.com`),
            chromedp.FullScreenshot(&buf, 95),
        ); err != nil {
            log.Fatal(err)
        }
    
        if err := ioutil.WriteFile("example.jpg", buf, 0644); err != nil {
            log.Fatal(err)
        }
    }
    


    Selenium에 비해 매우 가볍고 브라우저 자동화를 위한 광범위한 스펙트럼을 허용합니다. 크롤링, 스크랩, 스크린샷 촬영 등에 사용할 수 있습니다.
    스크린샷을 찍는 가장 간단한 방법이 필요한 경우 수백만 개의 스크린샷을 찍을 것으로 예상하지 않으므로 chromedp 를 사용하겠습니다. 그러나 다른 브라우저에서 스크린샷을 찍거나 브라우저 인스턴스 관리에 대해 생각하고 싶다면 더 간단한 방법이 있습니다.

    극작가



    Playwright은 통합 API로 Chromium , FirefoxWebKit을 자동화하는 데 가장 적합한 Go 라이브러리입니다. 브라우저 간 웹 자동화가 가능하도록 제작되었습니다.

    다른 브라우저에서 스크린샷을 찍고 싶다면 Playwright가 최선의 선택입니다.
    go get로 라이브러리를 설치합니다.

    go get github.com/playwright-community/playwright-go
    


    브라우저 및 OS 종속성을 설치하는 것을 잊지 마십시오.

    go run github.com/playwright-community/playwright-go/cmd/playwright install --with-deps
    


    그런 다음 스크린샷을 찍습니다.

    package main
    
    import (
        "log"
    
        "github.com/playwright-community/playwright-go"
    )
    
    func main() {
        pw, err := playwright.Run()
        if err != nil {
            log.Fatalf("could not launch playwright: %v", err)
        }
        browser, err := pw.Chromium.Launch()
        if err != nil {
            log.Fatalf("could not launch Chromium: %v", err)
        }
        page, err := browser.NewPage()
        if err != nil {
            log.Fatalf("could not create page: %v", err)
        }
        if _, err = page.Goto("https://example.com/", playwright.PageGotoOptions{
            WaitUntil: playwright.WaitUntilStateNetworkidle,
        }); err != nil {
            log.Fatalf("could not goto: %v", err)
        }
        if _, err = page.Screenshot(playwright.PageScreenshotOptions{
            Path: playwright.String("example.png"),
        }); err != nil {
            log.Fatalf("could not create screenshot: %v", err)
        }
        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가 최선의 선택입니다. chromedp만큼 강력하지만 필요한 경우 다른 브라우저 인스턴스를 실행할 수 있습니다.
    수백만 장의 스크린샷을 찍고 브라우저 인스턴스를 관리할 계획이라면 직접 할 수도 있지만 잘 정립된 서비스에 아웃소싱하는 것이 좋습니다.

    서비스로서의 스크린샷 API



    저는 스크린샷을 찍고 대규모 브라우저 인스턴스를 관리하는 것을 전문으로 합니다. 스크린샷에 고품질 Go 클라이언트를 제공하고 다양한 사용 사례를 다룹니다.

    쉬운 설치:

    go get github.com/screenshotone/gosdk
    


    사용하기 쉬움:

    client, err := screenshots.NewClient("IVmt2ghj9TG_jQ", "Sxt94yAj9aQSgg")
    if err != nil {
        // ...
    }
    
    options := screenshots.NewTakeOptions("https://example.com").
        Format("png").
        FullPage(true).
        DeviceScaleFactor(2).
        BlockAds(true).
        BlockTrackers(true)
    
    image, _, err := client.Take(context.TODO(), options)
    if err != nil {
        // ...
    }
    
    out, err := os.Create("example.png")
    if err != nil {
        // ...
    }
    defer out.Close()
    
    _, err = out.Write(out, image)
    if err != nil {
        // ...
    }
    


    자신에게 가장 적합하다고 생각되면 자유롭게 to sign up for our screenshot API 액세스 키를 받으십시오.

    요약



    귀하의 필요에 가장 적합한 솔루션을 선택하십시오. 그리고 좋은 하루 되세요👋

    좋은 웹페이지 즐겨찾기