Golang結(jié)合chromedp實(shí)現(xiàn)瀏覽器自動(dòng)化操作
當(dāng)大家提到“瀏覽器自動(dòng)化”,第一反應(yīng)往往是 Python + Selenium。 但其實(shí) Go 語(yǔ)言也能做瀏覽器自動(dòng)化,而且更快、更穩(wěn)定、更輕量!
這篇文章我們就來(lái)聊聊: 如何用 Go + chromedp 實(shí)現(xiàn)和 Python Selenium 一樣的網(wǎng)頁(yè)操作自動(dòng)化。
為什么要用 Go 做瀏覽器自動(dòng)化?
如果你做過(guò) Python 自動(dòng)化,你可能遇到:
- Selenium 啟動(dòng)瀏覽器太慢
- ChromeDriver 與 Chrome 版本對(duì)不上
- 腳本跑久了容易卡死
- CPU 占用高
而 chromedp 解決了這些痛點(diǎn):
- 不需要 ChromeDriver:直接使用瀏覽器內(nèi)置的 DevTools 協(xié)議控制瀏覽器,比 Selenium 少了一層驅(qū)動(dòng)。
- 速度快到飛起:chromedp 基于 Go 并發(fā)模型,性能比 Python Selenium 更高。
- 更穩(wěn)定:通過(guò) CDP(Chrome DevTools Protocol),由 Google 官方維護(hù)協(xié)議,本質(zhì)穩(wěn)定性更好。
- 可以 Headless/有界面任意切換:既能無(wú)界面跑腳本,也能像人一樣操作瀏覽器。
- 非常適合服務(wù)器、Docker 等環(huán)境運(yùn)行:相比 Selenium 更輕量。
chromedp 是什么
chromedp 是 Go 官方團(tuán)隊(duì)成員維護(hù)的一個(gè)庫(kù),用來(lái)通過(guò) CDP 協(xié)議控制 Chrome。
它可以:
- 打開 URL
- 自動(dòng)點(diǎn)擊元素
- 自動(dòng)填寫表單
- 自動(dòng)執(zhí)行 JS
- 自動(dòng)截圖
- 獲取 DOM 內(nèi)容
- 模擬真實(shí)用戶行為
幾乎你用 Selenium 能做的,它都能做,而且更快。
最簡(jiǎn)單示例:打開網(wǎng)頁(yè)并獲得標(biāo)題
下面是一個(gè)完整可運(yùn)行的 chromedp 代碼,演示:
- 打開 Google
- 等待 2 秒
- 獲取網(wǎng)頁(yè)標(biāo)題
package main
import (
"context"
"log"
"time"
"github.com/chromedp/chromedp"
)
func main() {
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
var res string
err := chromedp.Run(ctx,
chromedp.Navigate("https://www.google.com"),
chromedp.Sleep(2*time.Second),
chromedp.Evaluate(`document.title`, &res),
)
if err != nil {
log.Fatal(err)
}
log.Println("頁(yè)面標(biāo)題:", res)
}
運(yùn)行后終端會(huì)輸出:
頁(yè)面標(biāo)題: Google
一個(gè)非常簡(jiǎn)單的示例,卻展示了 chromedp 自動(dòng)化的威力。
chromedp 能做什么
這里列一部分最常見的自動(dòng)化任務(wù)。
自動(dòng)點(diǎn)擊網(wǎng)頁(yè)按鈕
chromedp.Click(`#login-button`)
自動(dòng)輸入內(nèi)容
chromedp.SendKeys(`#username`, "admin")
等待元素加載
chromedp.WaitVisible(`#content`)
執(zhí)行 JavaScript
chromedp.Evaluate(`document.querySelector("#num").innerText`, &value)
截圖網(wǎng)頁(yè)
var buf []byte chromedp.Screenshot(`body`, &buf)
批量爬取網(wǎng)頁(yè)數(shù)據(jù)
完全可以替代 Python 的 requests + BeautifulSoup + Selenium。
chromedp 與 Selenium 的對(duì)比
| 特性 | Selenium | chromedp |
|---|---|---|
| 驅(qū)動(dòng)依賴 | 需要 ChromeDriver | 不需要 |
| 速度 | 較慢 | 非???/td> |
| 穩(wěn)定性 | 偶有卡死 | 穩(wěn)定 |
| 運(yùn)行環(huán)境 | 不適合 Docker | 非常適合 |
| 控制協(xié)議 | WebDriver | Chrome DevTools |
| 學(xué)習(xí)難度 | 低 | 中等 |
如果你需要大規(guī)模自動(dòng)化任務(wù),比如:
- 批量登錄操作
- 自動(dòng)爬取內(nèi)容
- 自動(dòng)截圖生成工具
- Web 后臺(tái)批量上傳
- 網(wǎng)站 UI 自動(dòng)化測(cè)試
chromedp 是比 Selenium 更適合長(zhǎng)期跑的方案。
更多 chromedp 實(shí)戰(zhàn)(我可以幫你寫)
如果你需要實(shí)際業(yè)務(wù)自動(dòng)化,我可以幫你寫:
- 自動(dòng)登錄網(wǎng)站
- 自動(dòng)抓取商品信息
- 自動(dòng)化公眾號(hào)后臺(tái)
- 自動(dòng)化 Baijia 文章上傳
- 自動(dòng)化批量截圖
- 自動(dòng)化下載數(shù)據(jù)文件
- 批量爬取網(wǎng)頁(yè)并導(dǎo)出 CSV
告訴我你的需求,我來(lái)給你寫完整可運(yùn)行的 Go 自動(dòng)化腳本。
總結(jié)
Go + chromedp 是一個(gè)非常強(qiáng)大的瀏覽器自動(dòng)化組合,它:
- 不依賴 ChromeDriver
- 更輕量、更快速
- 更適合服務(wù)器環(huán)境
- 完全能實(shí)現(xiàn) Selenium 的功能,甚至更強(qiáng)
如果你正在使用 Python Selenium,不妨試一試 chromedp,它會(huì)讓自動(dòng)化變得更快、更簡(jiǎn)單。
到此這篇關(guān)于Golang結(jié)合chromedp實(shí)現(xiàn)瀏覽器自動(dòng)化操作的文章就介紹到這了,更多相關(guān)Go自動(dòng)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang設(shè)計(jì)模式之單例模式詳細(xì)講解
單例模式很容易記住。就像名稱一樣,它只能提供對(duì)象的單一實(shí)例,保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)該實(shí)例的方法。本文就來(lái)聊聊Go語(yǔ)言中的單例模式,感興趣的小伙伴可以了解一下2023-01-01
go開發(fā)alertmanger實(shí)現(xiàn)釘釘報(bào)警
本文主要介紹了go開發(fā)alertmanger實(shí)現(xiàn)釘釘報(bào)警,通過(guò)自己的url實(shí)現(xiàn)alertmanager的釘釘報(bào)警,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
GoRoutines高性能同時(shí)進(jìn)行多個(gè)Api調(diào)用實(shí)現(xiàn)
這篇文章主要為大家介紹了GoRoutines高性能同時(shí)進(jìn)行多個(gè)Api調(diào)用實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
解析Golang中的鎖競(jìng)爭(zhēng)問(wèn)題
這篇文章主要介紹了golang中的鎖競(jìng)爭(zhēng)問(wèn)題,本文通過(guò)實(shí)例代碼給大家詳細(xì)講解,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10

