golang快速實現網頁截圖的方法

golang是近幾年發展非常迅猛的一款服務器端的語言,其生態也日益豐富。對於使用golang實現網頁截圖這個需求,筆者在經過一番調研之後發現大傢有推薦Selenium方案,但是這一方案問題較多:

  • 需要安裝Selenium或是PhantomJS
  • PhantomJS已經停止維護瞭
  • Selenium的運行需要安裝chromedriver
  • chromedriver對chrome的版本有一定要求

還有推薦headless chrome方案的,但是這一方案也需要自行在服務器端安裝一款瀏覽器,對服務器的壓力比較大,並發性能也不好,所以最後筆者直接選用瞭一款第三方API的截圖服務。

該服務有如下特點:

  • 支持多線路
  • 支持登錄截圖
  • 支持UA變換
  • 支持Cookie註入 實現登錄截圖
  • 支持自定義寬高
  • 支持網頁滾動截圖
  • 支持設定截圖前的延遲時間

使用方式也很簡單,我們打開它的首頁 https://www.screenshotmaster.com/ 註冊一個賬號,然後你會在用戶中心獲取到一個唯一的Token,保存好這個Token 不要泄漏!

下面來看看它支持的參數:

您可以前往 API文檔 頁面查看更多的參數。

使用golang調用截屏大師的接口獲取截圖:

package main

import (
  "fmt"
  "io"
  "io/ioutil"
  "net/http"
  url2 "net/url"
  "os"
)

func main() {
  // 參數
  token := "YOUR_API_TOKEN"
  url := url2.QueryEscape("https://www.baidu.com")
  width := 1280
  height := 800
  full_page := 1

  // 構造URL
  query := "https://www.screenshotmaster.com/api/v1/screenshot"
  query += fmt.Sprintf("?token=%s&url=%s&width=%d&height=%d&full_page=%s",
    token, url, width, height, full_page)

  // 調用API
  resp, err := http.Get(query)
  if err != nil {
    panic(err)
  }
  defer resp.Body.Close()

  // 檢查是否調用成功
  if resp.StatusCode != 200 {
    errorBody, _ := ioutil.ReadAll(resp.Body)
    panic(fmt.Errorf("error while calling api %s", errorBody))
  }

  // 保存截圖
  file, err := os.Create("./screenshot.png")
  if err != nil {
    panic(err)
  }
  defer file.Close()

  _, err = io.Copy(file, resp.Body)
  if err != nil {
    panic(err)
  }
}

到此這篇關於golang快速實現網頁截圖的文章就介紹到這瞭,更多相關go實現網頁截圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: