Go로 웹사이트 스크린샷 찍는 방법
21414 단어 playwrightgo
겹칠 수 있지만 최상의 솔루션은 없습니다. 각각은 사용 사례와 요구 사항에 따라 다릅니다.
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 , Firefox 및 WebKit을 자동화하는 데 가장 적합한 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 액세스 키를 받으십시오.
요약
귀하의 필요에 가장 적합한 솔루션을 선택하십시오. 그리고 좋은 하루 되세요👋
Reference
이 문제에 관하여(Go로 웹사이트 스크린샷 찍는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/krasun/how-to-take-website-screenshots-with-go-feg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)