选择器概述

go-rod 库中,page.Search 方法用于在页面中查找元素,它支持多种类型的选择器来定位元素。以下是常见的选择器类型及其用法:


1. CSS 选择器(最常用)

CSS 选择器是最常见和灵活的选择器类型,可以基于元素的标签名、类名、ID、属性等进行选择。

示例:

  • 按标签名选择

    page.Search("div")
  • 按类名选择

    page.Search(".class-name")
  • 按 ID 选择

    page.Search("#element-id")
  • 按属性选择

    page.Search("[attribute='value']")
  • 组合选择

    page.Search("div.class-name[attr=value]")

2. XPath 选择器

XPath 选择器提供了一种更强大的方式来定位元素,特别适用于处理复杂的文档结构。

示例:

  • 按标签名选择

    page.Search("//div")
  • 按属性选择

    page.Search("//div[@class='class-name']")
  • 按文本内容选择

    page.Search("//*[text()='特定文本']")
  • 组合路径选择

    page.Search("//div[@class='class-name']//span")

3. 文本选择器(text=

text= 选择器用于根据元素的文本内容进行选择,是一种简单且直观的方式。

示例:

  • 精确匹配文本

    page.Search("text=复制账号")
  • 部分匹配文本(使用包含关系):

    page.Search("text*=账号")

4. 链接文本选择器(link=

link= 选择器专门用于根据链接文本进行选择,适用于 <a> 标签。

示例:

  • 精确匹配链接文本

    page.Search("link=登录")
  • 部分匹配链接文本

    page.Search("link*=登")

5. 其他特殊选择器

除了上述常见选择器,go-rod 还支持一些特殊选择器,用于特定场景。

示例:

  • 选择第一个子元素

    page.Search(":first-child")
  • 选择最后一个子元素

    page.Search(":last-child")
  • 选择包含特定类的元素

    page.Search(":has(.class-name)")

总结

选择器类型总结

选择器类型描述示例
CSS 选择器基于标签名、类名、ID、属性等选择元素div, .class-name, #id, [attr=value]
XPath 选择器提供强大而灵活的元素定位方式//div, //div[@class='name'], //*[text()='text']
文本选择器根据元素文本内容选择text=文本, text*=部分文本
链接文本选择器根据链接文本选择 <a> 标签link=链接文本, link*=部分文本
特殊选择器特定场景下的选择器:first-child, :last-child, :has(.class)

选择器使用建议

  1. 优先使用 CSS 选择器:因其简洁性和广泛支持性,适用于大多数场景。
  2. 复杂定位使用 XPath:当需要处理嵌套结构或复杂条件时,XPath 提供更多灵活性。
  3. 文本匹配使用 text=:对于简单文本匹配场景,text= 选择器直观易用。
  4. 链接选择使用 link=:专门针对 <a> 标签的链接文本进行选择。

示例代码

以下是一个综合示例,展示不同选择器的使用方法:

package main

import (
    "context"
    "fmt"
    "time"

    "github.com/go-rod/rod"
    "github.com/go-rod/rod/lib/launcher"
)

func main() {
    // 禁用无头模式
    url := launcher.New().Headless(false).MustLaunch()

    // 创建带有超时的上下文
    ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
    defer cancel()

    // 创建浏览器实例并链接
    browser := rod.New().ControlURL(url).Context(ctx).MustConnect()
    defer browser.MustClose()

    // 创建一个新的页面
    page := browser.MustPage("https://example.com").Context(ctx)

    // 等待页面加载完成
    page.MustWaitLoad()

    // 使用不同选择器搜索元素

    // CSS 选择器
    cssResult, err := page.Search("div.content")
    if err != nil {
        fmt.Println("CSS 选择器搜索失败:", err)
        return
    }
    fmt.Println("CSS 选择器结果:", cssResult.First().MustText())

    // XPath 选择器
    xpathResult, err := page.Search("//div[@class='content']")
    if err != nil {
        fmt.Println("XPath 选择器搜索失败:", err)
        return
    }
    fmt.Println("XPath 选择器结果:", xpathResult.First().MustText())

    // 文本选择器
    textResult, err := page.Search("text=特定文本")
    if err != nil {
        fmt.Println("文本选择器搜索失败:", err)
        return
    }
    fmt.Println("文本选择器结果:", textResult.First().MustText())

    // 链接文本选择器
    linkResult, err := page.Search("link=链接文本")
    if err != nil {
        fmt.Println("链接文本选择器搜索失败:", err)
        return
    }
    fmt.Println("链接文本选择器结果:", linkResult.First().MustText())

    // 延迟退出,便于观察效果
    time.Sleep(10 * time.Second)
}

这样可以全面掌握不同类型选择器的使用方法和应用场景。

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