golang是近几年倒退十分迅猛的一款服务器端的语言,其生态也日益丰盛。对于应用golang实现网页截图这个需要,笔者在通过一番调研之后发现大家有举荐Selenium计划,然而这一计划问题较多:

  • 须要装置Selenium或是PhantomJS
  • PhantomJS曾经进行保护了
  • Selenium的运行须要装置chromedriver
  • chromedriver对chrome的版本有肯定要求

还有举荐headless chrome计划的,然而这一计划也须要自行在服务器端装置一款浏览器,对服务器的压力比拟大,并发性能也不好,所以最初笔者间接选用了一款第三方API的截图服务。

该服务有如下特点:

  • 反对多线路
  • 反对登录截图
  • 反对UA变换
  • 反对Cookie注入 实现登录截图
  • 反对自定义宽高
  • 反对网页滚动截图
  • 反对设定截图前的延迟时间

应用形式也很简略,咱们关上它的首页 https://www.screenshotmaster.com/ 注册一个账号,而后你会在用户核心获取到一个惟一的Token,保留好这个Token 不要透露!

上面来看看它反对的参数:

您能够返回API文档页面查看更多的参数。

应用golang调用截屏巨匠的接口获取截图:

package mainimport (    "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)    }}