Ubuntu 22.04 安装 Google Chrome 及 Go-Rod 自动化操作完整指南


1. 安装 Google Chrome

1.1 直接安装(推荐)

# 下载最新稳定版 Chrome(amd64架构)
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

# 安装 Chrome 并自动处理依赖
sudo apt install -y ./google-chrome-stable_current_amd64.deb

# 验证安装
google-chrome --version

1.2 通过官方仓库安装(可选)

# 添加 Google 的 GPG 密钥
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

# 添加 Chrome 的 APT 源
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list

# 更新并安装
sudo apt update && sudo apt install -y google-chrome-stable

2. Go-Rod 自动化脚本配置

2.1 基础代码示例

package main

import (
    "log"
    "os"
    "github.com/go-rod/rod"
    "github.com/go-rod/rod/lib/launcher"
    "github.com/go-rod/rod/lib/proto"
)

func main() {
    // 启动浏览器配置
    url := launcher.New().
        Headless(true).          // 无头模式
        Set("no-sandbox").       // 禁用沙盒(必须设置,尤其是 root 用户)
        MustLaunch()

    // 连接浏览器实例
    browser := rod.New().ControlURL(url).MustConnect()
    defer browser.MustClose()

    // 创建页面并导航
    page := browser.MustPage("URL替换为实际地址").MustWaitLoad()

    // 设置 User-Agent 和语言
    page.MustSetUserAgent(&proto.NetworkSetUserAgentOverride{
        UserAgent:      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
        AcceptLanguage: "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    })

    // 调试操作(示例)
    saveDebugData(page)

    // 其他操作(如填写表单)
    // page.MustElement("#username").MustInput("user")
    // page.MustElement("#password").MustInput("pass")
    // page.MustElement("button[type='submit']").MustClick()
}

// 调试方法封装
func saveDebugData(page *rod.Page) {
    // 保存页面 HTML
    html, err := page.HTML()
    if err != nil {
        log.Printf("保存 HTML 失败: %v", err)
    } else {
        os.WriteFile("debug_page.html", []byte(html), 0644)
    }

    // 截图保存
    if err := page.MustScreenshot("debug_page.png"); err != nil {
        log.Printf("截图失败: %v", err)
    }
}

3. 关键配置详解

3.1 User-Agent 的作用

UserAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
  • 用途
    User-Agent 是浏览器向服务器发送的标识字符串,用于告知服务器客户端的浏览器类型、操作系统、渲染引擎等信息。
  • 为什么需要设置

    1. 避免被检测为爬虫:许多网站会检测无头浏览器(如 Headless Chrome),通过设置常见浏览器的 User-Agent 可降低被屏蔽的风险。
    2. 模拟真实用户:使请求看起来像是来自普通浏览器(如 Chrome 或 Edge)。
    3. 兼容性:某些网站会根据 User-Agent 返回不同内容(如移动端或桌面端页面)。
  • 参数解析

    • Windows NT 10.0:表示操作系统为 Windows 10。
    • Win64; x64:64 位系统。
    • AppleWebKit/537.36:浏览器内核版本。
    • Chrome/91.0.4472.124:Chrome 浏览器版本。
    • Safari/537.36:兼容 Safari 内核标识(Chrome 基于 WebKit)。

3.2 Accept-Language 的作用

AcceptLanguage: "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"
  • 用途
    Accept-Language 是 HTTP 请求头,用于告知服务器客户端接受的语言优先级。
  • 为什么需要设置

    1. 语言适配:确保服务器返回中文内容(如 zh-CN 优先)。
    2. 降低检测风险:模拟真实用户的浏览器语言配置,避免因默认语言异常被识别为机器人。
    3. 多语言支持:如果目标网站支持多语言,可以控制返回的页面语言。
  • 参数解析

    • zh-CN,zh;q=0.9:优先接受简体中文(权重 0.9)。
    • en;q=0.8:其次接受英文(权重 0.8)。
    • en-GB;q=0.7:英式英语。
    • en-US;q=0.6:美式英语。

3.3 必选参数

  • Set("no-sandbox")
    作用:禁用 Chrome 沙盒模式。
    必要性:在 Linux 服务器或 Docker 中以 root 用户运行时必须启用,否则会报错 Failed to launch browser
  • Headless(true)
    作用:以无界面模式运行浏览器,节省资源。
    调试建议:设为 false 可显示浏览器界面观察操作。

4. 调试方法

4.1 基础调试

方法作用代码示例
保存页面 HTML分析页面结构html, _ := page.HTML()
截图检查渲染效果page.MustScreenshot("debug.png")
打印控制台日志捕获 console.log 输出见下文代码

4.2 高级调试

// 监听控制台日志
go page.EachEvent(func(e *proto.RuntimeConsoleAPICalled) {
    for _, arg := range e.Args {
        log.Printf("[控制台日志]: %s", arg.Value)
    }
})()

// 监听网络请求
go page.EachEvent(func(e *proto.NetworkRequestWillBeSent) {
    log.Printf("[请求发送]: %s %s", e.Request.Method, e.Request.URL)
})()

5. 常见问题与解决

5.1 依赖缺失错误

  • 报错示例
    Failed to launch browser: error while loading shared libraries: libXss.so.1
  • 解决方案

    sudo apt install -y libxss1 libgbm1 libasound2

5.2 无头模式被检测

  • 现象:页面返回反爬提示。
  • 解决方案

    • 禁用无头模式:Headless(false)
    • 添加更复杂的 User-Agent 和分辨率模拟:

      page.MustSetViewport(&proto.EmulationSetDeviceMetricsOverride{
          Width:            1920,
          Height:           1080,
          DeviceScaleFactor: 1,
          Mobile:           false,
      })

6. 总结

  1. 安装 Chrome:优先使用 .deb 直接安装,确保依赖完整。
  2. Go-Rod 配置

    • 必须设置 no-sandbox(尤其 root 用户)。
    • 必须设置 User-AgentAccept-Language 模拟真实用户。
  3. 调试技巧

    • 结合 HTML 保存、截图、日志监听快速定位问题。
  4. 生产环境建议

    • 使用 Docker 容器化运行(避免环境差异)。
    • 定期更新 User-Agent 以匹配最新浏览器版本。

每日更新-免费小火箭账号
不要错过任何机会,探索最新的应用和游戏,就在我们的平台。
立即访问
最后修改:2025 年 04 月 25 日
如果觉得我的文章对你有用,请随意赞赏