最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過(guò)Golang實(shí)現(xiàn)無(wú)頭瀏覽器截圖

 更新時(shí)間:2023年05月18日 09:33:24   作者:王中陽(yáng)Go  
在Web開(kāi)發(fā)中,有時(shí)需要對(duì)網(wǎng)頁(yè)進(jìn)行截圖,以便進(jìn)行頁(yè)面預(yù)覽、測(cè)試等操作,本文為大家整理了Golang實(shí)現(xiàn)無(wú)頭瀏覽器的截圖的方法,感興趣的可以了解一下

前言

在Web開(kāi)發(fā)中,有時(shí)需要對(duì)網(wǎng)頁(yè)進(jìn)行截圖,以便進(jìn)行頁(yè)面預(yù)覽、測(cè)試等操作。

而使用無(wú)頭瀏覽器來(lái)實(shí)現(xiàn)截圖功能,可以避免手動(dòng)操作的繁瑣和不穩(wěn)定性。

這篇文章將介紹:使用Golang進(jìn)行無(wú)頭瀏覽器的截圖,輕松實(shí)現(xiàn)頁(yè)面預(yù)覽、測(cè)試和模擬用戶操作。

什么是無(wú)頭瀏覽器

無(wú)頭瀏覽器(Headless Browser)是一種沒(méi)有圖形用戶界面的瀏覽器,它可以在后臺(tái)運(yùn)行,并通過(guò)編程接口來(lái)控制和操作瀏覽器。

無(wú)頭瀏覽器通常用于自動(dòng)化測(cè)試、網(wǎng)頁(yè)截圖、爬蟲(chóng)等場(chǎng)景,可以幫助我們更方便地進(jìn)行網(wǎng)頁(yè)操作和數(shù)據(jù)采集。

常見(jiàn)的無(wú)頭瀏覽器包括Chrome Headless、PhantomJS、Puppeteer等。

在Golang中,可以使用chromedprod等庫(kù)來(lái)實(shí)現(xiàn)無(wú)頭瀏覽器截圖的功能。

更多場(chǎng)景

使用Golang實(shí)現(xiàn)無(wú)頭瀏覽器截圖可以在很多場(chǎng)景下發(fā)揮作用,以下是一些常見(jiàn)的場(chǎng)景:

網(wǎng)頁(yè)截圖:使用無(wú)頭瀏覽器可以方便地對(duì)網(wǎng)頁(yè)進(jìn)行截圖,可以用于生成網(wǎng)頁(yè)快照、監(jiān)控網(wǎng)頁(yè)變化等。

自動(dòng)化測(cè)試:使用無(wú)頭瀏覽器可以模擬用戶操作,可以用于自動(dòng)化測(cè)試、自動(dòng)化部署等。

網(wǎng)頁(yè)爬蟲(chóng):使用無(wú)頭瀏覽器可以模擬瀏覽器行為,可以用于網(wǎng)頁(yè)爬蟲(chóng)、數(shù)據(jù)采集等。

數(shù)據(jù)分析:使用無(wú)頭瀏覽器可以獲取網(wǎng)頁(yè)數(shù)據(jù),可以用于數(shù)據(jù)分析、機(jī)器學(xué)習(xí)等。

使用chromedp

chromedp是一個(gè)基于Chrome或Chromium瀏覽器的DevTools協(xié)議的庫(kù),可以方便地控制瀏覽器進(jìn)行截圖、模擬用戶操作等功能。

以下是使用chromedp庫(kù)實(shí)現(xiàn)無(wú)頭瀏覽器截圖的示例代碼:

package?main

import?(
???"context"
???"io/ioutil"
???"log"
???"time"

???"github.com/chromedp/cdproto/page"
???"github.com/chromedp/chromedp"
)

func?main()?{
???//?創(chuàng)建一個(gè)上下文
???ctx,?cancel?:=?chromedp.NewContext(context.Background())
???defer?cancel()

???//?設(shè)置瀏覽器選項(xiàng)
???opts?:=?append(chromedp.DefaultExecAllocatorOptions[:],
??????chromedp.Flag("headless",?true),
??????chromedp.Flag("disable-gpu",?true),
??????chromedp.Flag("no-sandbox",?true),
??????chromedp.Flag("disable-dev-shm-usage",?true),
??????chromedp.Flag("remote-debugging-port",?"9222"),
???)
???allocCtx,?cancel?:=?chromedp.NewExecAllocator(ctx,?opts...)
???defer?cancel()

???//?創(chuàng)建一個(gè)瀏覽器實(shí)例
???ctx,?cancel?=?chromedp.NewContext(allocCtx)
???defer?cancel()

???//?導(dǎo)航到指定的URL
???var?buf?[]byte
???err?:=?chromedp.Run(ctx,?chromedp.Navigate("https://www.baidu.com"),?chromedp.Sleep(2*time.Second),?chromedp.ActionFunc(func(ctx?context.Context)?error?{
??????//?獲取頁(yè)面截圖
??????var?err?error
??????buf,?err?=?page.CaptureScreenshot().WithQuality(90).WithClip(&page.Viewport{X:?0,?Y:?0,?Width:?1920,?Height:?1080,?Scale:?1}).Do(ctx)
??????if?err?!=?nil?{
?????????return?err
??????}
??????return?nil
???}))
???if?err?!=?nil?{
??????log.Fatal(err)
???}
???//?將截圖保存到文件
???err?=?ioutil.WriteFile("screenshot.png",?buf,?0644)
???if?err?!=?nil?{
??????log.Fatal(err)
???}
}

這段代碼使用chromedp庫(kù)創(chuàng)建了一個(gè)無(wú)頭瀏覽器實(shí)例,并導(dǎo)航到百度首頁(yè)。

然后使用page.CaptureScreenshot()函數(shù)獲取頁(yè)面截圖,并將截圖保存到screenshot.png文件中。

運(yùn)行演示

把我上面的代碼復(fù)制到main.go文件中,安裝依賴直接運(yùn)行即可:

go mod tidy
go run main.go

執(zhí)行效果如下:

需要注意的是,使用chromedp庫(kù)需要先安裝Chrome或Chromium瀏覽器,并將其添加到系統(tǒng)的環(huán)境變量中。

使用rod庫(kù)

rod是另一個(gè)基于Chrome或Chromium瀏覽器的DevTools協(xié)議的庫(kù),可以方便地控制瀏覽器進(jìn)行截圖、模擬用戶操作等功能。

以下是使用rod庫(kù)實(shí)現(xiàn)無(wú)頭瀏覽器截圖的示例代碼:

package?main

import?(
?"github.com/go-rod/rod"
?"github.com/go-rod/rod/lib/proto"
?"github.com/go-rod/rod/lib/utils"
?"github.com/ysmood/gson"
)

func?main()?{
?page?:=?rod.New().MustConnect().MustPage("https://baidu.com").MustWaitLoad()

?//簡(jiǎn)單模式,默認(rèn)截圖設(shè)置
?page.MustScreenshot("my.png")

?//自定義截圖設(shè)置
?img,?_?:=?page.Screenshot(true,?&proto.PageCaptureScreenshot{
??Format:??proto.PageCaptureScreenshotFormatJpeg,
??Quality:?gson.Int(90),
??Clip:?&proto.PageViewport{
???X:??????0,
???Y:??????0,
???Width:??300,
???Height:?200,
???Scale:??1,
??},
??FromSurface:?true,
?})
?_?=?utils.OutputFile("my.jpg",?img)
}

這段代碼使用rod庫(kù)創(chuàng)建了一個(gè)無(wú)頭瀏覽器實(shí)例,并導(dǎo)航到百度首頁(yè)。

然后使用page.MustScreenshot()函數(shù)獲取頁(yè)面截圖,并將截圖保存到my.png文件中。

同樣演示了使用page.Screenshot自定義截圖,并將自定義截圖保存到了my.jpg文件中。

需要注意的是,使用rod庫(kù)需要先安裝Chrome或Chromium瀏覽器,并將其添加到系統(tǒng)的環(huán)境變量中。

運(yùn)行方式

rod庫(kù)示例代碼的運(yùn)行方式和chromedp基本一致,略有區(qū)別的是我們需要根據(jù)提示,運(yùn)行多次go run main.go安裝需要的插件:

碰到上面提示不用慌,再執(zhí)行一次go run main.go即可

執(zhí)行效果如下:

注意

再?gòu)?qiáng)調(diào)一遍,不管是使用chromedp庫(kù)還是rod庫(kù),都需要先安裝Chrome或Chromium瀏覽器,并將其添加到系統(tǒng)的環(huán)境變量中。

我文章中的演示是基于Mac OS。

總結(jié)

本文介紹了如何使用Golang實(shí)現(xiàn)無(wú)頭瀏覽器截圖的功能。

通過(guò)使用chromedprod庫(kù),可以方便地控制瀏覽器進(jìn)行截圖、模擬用戶操作等功能。

使用Golang實(shí)現(xiàn)無(wú)頭瀏覽器截圖的優(yōu)勢(shì)包括:

高效性:Golang是一種高效的編程語(yǔ)言,可以快速地處理大量數(shù)據(jù)和請(qǐng)求。

可擴(kuò)展性:Golang具有良好的可擴(kuò)展性,可以方便地?cái)U(kuò)展和修改代碼。

跨平臺(tái)性:Golang可以在多個(gè)平臺(tái)上運(yùn)行,可以方便地進(jìn)行跨平臺(tái)開(kāi)發(fā)和部署。

安全性:Golang具有良好的安全性,可以有效地防止代碼注入和攻擊。

綜上所述,使用Golang實(shí)現(xiàn)無(wú)頭瀏覽器截圖可以在很多場(chǎng)景下發(fā)揮作用,具有高效性、可擴(kuò)展性、跨平臺(tái)性和安全性等優(yōu)勢(shì)。

到此這篇關(guān)于通過(guò)Golang實(shí)現(xiàn)無(wú)頭瀏覽器截圖的文章就介紹到這了,更多相關(guān)Golang瀏覽器截圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang逐行讀取文件的操作

    golang逐行讀取文件的操作

    這篇文章主要介紹了golang逐行讀取文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • go語(yǔ)言調(diào)用c語(yǔ)言的so動(dòng)態(tài)庫(kù)的實(shí)現(xiàn)

    go語(yǔ)言調(diào)用c語(yǔ)言的so動(dòng)態(tài)庫(kù)的實(shí)現(xiàn)

    在Go語(yǔ)言開(kāi)發(fā)過(guò)程中,有時(shí)需要調(diào)用C或C++編寫(xiě)的so動(dòng)態(tài)庫(kù),本文介紹了如何在Go語(yǔ)言中調(diào)用so庫(kù)的步驟和注意事項(xiàng),包括環(huán)境準(zhǔn)備、編譯生成.so文件、Go文件編寫(xiě)、以及可能遇到的問(wèn)題和解決方法,感興趣的可以了解一下
    2024-10-10
  • windows下安裝make及使用makefile文件

    windows下安裝make及使用makefile文件

    這篇文章主要為大家介紹了windows下安裝make及使用makefile文件方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • goland設(shè)置顏色和字體的操作

    goland設(shè)置顏色和字體的操作

    這篇文章主要介紹了goland設(shè)置顏色和字體的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • GO實(shí)現(xiàn)跳躍表的示例詳解

    GO實(shí)現(xiàn)跳躍表的示例詳解

    跳表全稱叫做跳躍表,簡(jiǎn)稱跳表,是一個(gè)隨機(jī)化的數(shù)據(jù)結(jié)構(gòu),實(shí)質(zhì)就是一種可以進(jìn)行二分查找的有序鏈表。本文將利用GO語(yǔ)言編寫(xiě)一個(gè)跳表,需要的可以參考一下
    2022-12-12
  • Go語(yǔ)言學(xué)習(xí)之操作MYSQL實(shí)現(xiàn)CRUD

    Go語(yǔ)言學(xué)習(xí)之操作MYSQL實(shí)現(xiàn)CRUD

    Go官方提供了database包,database包下有sql/driver。該包用來(lái)定義操作數(shù)據(jù)庫(kù)的接口,這保證了無(wú)論使用哪種數(shù)據(jù)庫(kù),操作方式都是相同的。本文就來(lái)和大家聊聊Go語(yǔ)言如何操作MYSQL實(shí)現(xiàn)CRUD,希望對(duì)大家有所幫助
    2023-02-02
  • Go中unsafe.Pointer類型的使用小結(jié)

    Go中unsafe.Pointer類型的使用小結(jié)

    unsafe.Pointer?是?Go?語(yǔ)言標(biāo)準(zhǔn)庫(kù)?unsafe?包中的一個(gè)特殊類型,用于在不同類型的指針之間進(jìn)行?無(wú)類型轉(zhuǎn)換,允許你繞過(guò)?Go?的類型系統(tǒng)進(jìn)行底層操作,感興趣的可以了解一下
    2026-02-02
  • Golang開(kāi)發(fā)gRPC服務(wù)入門介紹

    Golang開(kāi)發(fā)gRPC服務(wù)入門介紹

    這篇文章主要介紹了Golang開(kāi)發(fā)gRPC服務(wù),Golang開(kāi)發(fā)gRPC應(yīng)用程序的套路也已經(jīng)很清晰,這篇文章就來(lái)做一個(gè)簡(jiǎn)單的介紹,算是入門,需要的朋友可以參考下
    2022-04-04
  • Go?mod?replace使用方法及常見(jiàn)問(wèn)題分析

    Go?mod?replace使用方法及常見(jiàn)問(wèn)題分析

    這篇文章主要為大家介紹了Go?mod?replace使用方法及常見(jiàn)問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Go1.20最新資訊go?arena手動(dòng)管理內(nèi)存鴿了

    Go1.20最新資訊go?arena手動(dòng)管理內(nèi)存鴿了

    由于過(guò)于繁雜,Go?核心團(tuán)隊(duì)成員@Ian?Lance?Taylor,也表態(tài):目前尚未做出任何決定,也不可能在短期內(nèi)做出任何決定,可以認(rèn)為這個(gè)提案基本鴿了,今天這篇文章就是給大家同步目前的情況
    2023-11-11

最新評(píng)論

新野县| 乳山市| 云南省| 友谊县| 东台市| 南平市| 信阳市| 巴南区| 达孜县| 新和县| 兴隆县| 金堂县| 桐庐县| 定远县| 渝中区| 龙游县| 湛江市| 漠河县| 松滋市| 勐海县| 东乌珠穆沁旗| 闻喜县| 阳江市| 佛学| 万源市| 贵德县| 新干县| 华阴市| 井冈山市| 巴楚县| 达尔| 漠河县| 即墨市| 东明县| 丹凤县| 苍山县| 驻马店市| 黔江区| 宝丰县| 商河县| 福建省|