骡石坡农民 發表於 2025-12-4 08:16:28

Golang结合chromedp实现浏览器自动化操作

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">为什么要用 Go 做浏览器自动化?</a></li><li><a href="#_label1">chromedp 是什么</a></li><li><a href="#_label2">最简单示例:打开网页并获得标题</a></li><li><a href="#_label3">chromedp 能做什么</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_0">自动点击网页按钮</a></li><li><a href="#_lab2_3_1">自动输入内容</a></li><li><a href="#_lab2_3_2">等待元素加载</a></li><li><a href="#_lab2_3_3">执行 JavaScript</a></li><li><a href="#_lab2_3_4">截图网页</a></li><li><a href="#_lab2_3_5">批量爬取网页数据</a></li></ul><li><a href="#_label4">chromedp 与 Selenium 的对比</a></li><ul class="second_class_ul"></ul><li><a href="#_label5">更多 chromedp 实战(我可以帮你写)</a></li><ul class="second_class_ul"></ul><li><a href="#_label6">总结</a></li><ul class="second_class_ul"></ul></ul></div><p>当大家提到&ldquo;浏览器自动化&rdquo;,第一反应往往是 Python + Selenium。 但其实 <strong>Go 语言也能做浏览器自动化,而且更快、更稳定、更轻量!</strong></p>
<p>这篇文章我们就来聊聊: <strong>如何用 Go + chromedp 实现和 Python Selenium 一样的网页操作自动化。</strong></p>
<p class="maodian"><a name="_label0"></a></p><h2>为什么要用 Go 做浏览器自动化?</h2>
<p>如果你做过 Python 自动化,你可能遇到:</p>
<ul><li>Selenium 启动浏览器太慢</li><li>ChromeDriver 与 Chrome 版本对不上</li><li>脚本跑久了容易卡死</li><li>CPU 占用高</li></ul>
<p>而 chromedp 解决了这些痛点:</p>
<ul><li>不需要 ChromeDriver:直接使用浏览器内置的 DevTools 协议控制浏览器,比 Selenium 少了一层驱动。</li><li>速度快到飞起:chromedp 基于 Go 并发模型,性能比 Python Selenium 更高。</li><li>更稳定:通过 CDP(Chrome DevTools Protocol),由 Google 官方维护协议,本质稳定性更好。</li><li>可以 Headless/有界面任意切换:既能无界面跑脚本,也能像人一样操作浏览器。</li><li>非常适合服务器、Docker 等环境运行:相比 Selenium 更轻量。</li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>chromedp 是什么</h2>
<p>chromedp 是 Go 官方团队成员维护的一个库,用来通过 CDP 协议控制 Chrome。</p>
<p>它可以:</p>
<ul><li>打开 URL</li><li>自动点击元素</li><li>自动填写表单</li><li>自动执行 JS</li><li>自动截图</li><li>获取 DOM 内容</li><li>模拟真实用户行为</li></ul>
<p>几乎你用 Selenium 能做的,它都能做,而且更快。</p>
<p class="maodian"><a name="_label2"></a></p><h2>最简单示例:打开网页并获得标题</h2>
<p>下面是一个完整可运行的 chromedp 代码,演示:</p>
<ul><li>打开 Google</li><li>等待 2 秒</li><li>获取网页标题</li></ul>
<div class="jb51code"><pre class="brush:go;">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`, &amp;res),
        )

        if err != nil {
                log.Fatal(err)
        }

        log.Println("页面标题:", res)
}
</pre></div>
<p>运行后终端会输出:</p>
<blockquote><p>页面标题: Google</p></blockquote>
<p>一个非常简单的示例,却展示了 chromedp 自动化的威力。</p>
<p class="maodian"><a name="_label3"></a></p><h2>chromedp 能做什么</h2>
<p>这里列一部分最常见的自动化任务。</p>
<p class="maodian"><a name="_lab2_3_0"></a></p><h3>自动点击网页按钮</h3>
<div class="jb51code"><pre class="brush:go;">chromedp.Click(`#login-button`)
</pre></div>
<p class="maodian"><a name="_lab2_3_1"></a></p><h3>自动输入内容</h3>
<div class="jb51code"><pre class="brush:go;">chromedp.SendKeys(`#username`, "admin")
</pre></div>
<p class="maodian"><a name="_lab2_3_2"></a></p><h3>等待元素加载</h3>
<div class="jb51code"><pre class="brush:go;">chromedp.WaitVisible(`#content`)
</pre></div>
<p class="maodian"><a name="_lab2_3_3"></a></p><h3>执行 JavaScript</h3>
<div class="jb51code"><pre class="brush:go;">chromedp.Evaluate(`document.querySelector("#num").innerText`, &amp;value)
</pre></div>
<p class="maodian"><a name="_lab2_3_4"></a></p><h3>截图网页</h3>
<div class="jb51code"><pre class="brush:go;">var buf []byte
chromedp.Screenshot(`body`, &amp;buf)
</pre></div>
<p class="maodian"><a name="_lab2_3_5"></a></p><h3>批量爬取网页数据</h3>
<p>完全可以替代 Python 的 requests + BeautifulSoup + Selenium。</p>
<p class="maodian"><a name="_label4"></a></p><h2>chromedp 与 Selenium 的对比</h2>
<table><thead><tr><th>特性</th><th>Selenium</th><th>chromedp</th></tr></thead><tbody><tr><td>驱动依赖</td><td>需要 ChromeDriver</td><td>不需要</td></tr><tr><td>速度</td><td>较慢</td><td>非常快</td></tr><tr><td>稳定性</td><td>偶有卡死</td><td>稳定</td></tr><tr><td>运行环境</td><td>不适合 Docker</td><td>非常适合</td></tr><tr><td>控制协议</td><td>WebDriver</td><td>Chrome DevTools</td></tr><tr><td>学习难度</td><td>低</td><td>中等</td></tr></tbody></table>
<p>如果你需要大规模自动化任务,比如:</p>
<ul><li>批量登录操作</li><li>自动爬取内容</li><li>自动截图生成工具</li><li>Web 后台批量上传</li><li>网站 UI 自动化测试</li></ul>
<p>chromedp 是比 Selenium 更适合长期跑的方案。</p>
<p class="maodian"><a name="_label5"></a></p><h2>更多 chromedp 实战(我可以帮你写)</h2>
<p>如果你需要实际业务自动化,我可以帮你写:</p>
<ul><li>自动登录网站</li><li>自动抓取商品信息</li><li>自动化公众号后台</li><li>自动化 Baijia 文章上传</li><li>自动化批量截图</li><li>自动化下载数据文件</li><li>批量爬取网页并导出 CSV</li></ul>
<p>告诉我你的需求,我来给你写完整可运行的 Go 自动化脚本。</p>
<p class="maodian"><a name="_label6"></a></p><h2>总结</h2>
<p>Go + chromedp 是一个非常强大的浏览器自动化组合,它:</p>
<ul><li>不依赖 ChromeDriver</li><li>更轻量、更快速</li><li>更适合服务器环境</li><li>完全能实现 Selenium 的功能,甚至更强</li></ul>
<p>如果你正在使用 Python Selenium,不妨试一试 chromedp,它会让自动化变得更快、更简单。</p>
頁: [1]
查看完整版本: Golang结合chromedp实现浏览器自动化操作