golang快速實(shí)現(xiàn)網(wǎng)頁截圖的方法
golang是近幾年發(fā)展非常迅猛的一款服務(wù)器端的語言,其生態(tài)也日益豐富。對(duì)于使用golang實(shí)現(xiàn)網(wǎng)頁截圖這個(gè)需求,筆者在經(jīng)過一番調(diào)研之后發(fā)現(xiàn)大家有推薦Selenium方案,但是這一方案問題較多:
- 需要安裝Selenium或是PhantomJS
- PhantomJS已經(jīng)停止維護(hù)了
- Selenium的運(yùn)行需要安裝chromedriver
- chromedriver對(duì)chrome的版本有一定要求
還有推薦headless chrome方案的,但是這一方案也需要自行在服務(wù)器端安裝一款瀏覽器,對(duì)服務(wù)器的壓力比較大,并發(fā)性能也不好,所以最后筆者直接選用了一款第三方API的截圖服務(wù)。
該服務(wù)有如下特點(diǎn):
- 支持多線路
- 支持登錄截圖
- 支持UA變換
- 支持Cookie注入 實(shí)現(xiàn)登錄截圖
- 支持自定義寬高
- 支持網(wǎng)頁滾動(dòng)截圖
- 支持設(shè)定截圖前的延遲時(shí)間
使用方式也很簡(jiǎn)單,我們打開它的首頁 https://www.screenshotmaster.com/ 注冊(cè)一個(gè)賬號(hào),然后你會(huì)在用戶中心獲取到一個(gè)唯一的Token,保存好這個(gè)Token 不要泄漏!
下面來看看它支持的參數(shù):
您可以前往 API文檔 頁面查看更多的參數(shù)。
使用golang調(diào)用截屏大師的接口獲取截圖:
package main import ( "fmt" "io" "io/ioutil" "net/http" url2 "net/url" "os" ) func main() { // 參數(shù) token := "YOUR_API_TOKEN" url := url2.QueryEscape("https://www.baidu.com") width := 1280 height := 800 full_page := 1 // 構(gòu)造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) // 調(diào)用API resp, err := http.Get(query) if err != nil { panic(err) } defer resp.Body.Close() // 檢查是否調(diào)用成功 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) } }
到此這篇關(guān)于golang快速實(shí)現(xiàn)網(wǎng)頁截圖的文章就介紹到這了,更多相關(guān)go實(shí)現(xiàn)網(wǎng)頁截圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GoLang并發(fā)機(jī)制探究goroutine原理詳細(xì)講解
goroutine是Go語言提供的語言級(jí)別的輕量級(jí)線程,在我們需要使用并發(fā)時(shí),我們只需要通過 go 關(guān)鍵字來開啟 goroutine 即可。這篇文章主要介紹了GoLang并發(fā)機(jī)制goroutine原理,感興趣的可以了解一下2022-12-12Go語言面向?qū)ο笾械亩鄳B(tài)你學(xué)會(huì)了嗎
面向?qū)ο笾械亩鄳B(tài)(Polymorphism)是指一個(gè)對(duì)象可以具有多種不同的形態(tài)或表現(xiàn)方式,本文將通過一些簡(jiǎn)單的示例為大家講解一下多態(tài)的實(shí)現(xiàn),需要的可以參考下2023-07-07Go語言基礎(chǔ)for循環(huán)語句的用法及示例詳解
這篇文章主要為大家介紹了Go語言基礎(chǔ)for循環(huán)語句的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11使用Go重構(gòu)流式日志網(wǎng)關(guān)的實(shí)戰(zhàn)分享
流式日志網(wǎng)關(guān)的主要功能是提供?HTTP?接口,接收?CDN?邊緣節(jié)點(diǎn)上報(bào)的各類日志(訪問日志/報(bào)錯(cuò)日志/計(jì)費(fèi)日志等),將日志作預(yù)處理并分流到多個(gè)的?Kafka?集群和?Topic?中,本文就給大家分享如何使用?Go?重構(gòu)流式日志網(wǎng)關(guān)2023-06-06go運(yùn)算符對(duì)變量和值執(zhí)行操作示例詳解
這篇文章主要為大家介紹了go運(yùn)算符對(duì)變量和值執(zhí)行操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09CSP communicating sequential processes并發(fā)模型
這篇文章主要為大家介紹了CSP communicating sequential processes并發(fā)模型,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05