共计 1188 个字符,预计需要花费 3 分钟才能阅读完成。
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)
}
}
正文完