自动化测试工具 Rod:
- Rod 是一个基于 Go 语言的浏览器自动化测试工具,支持无头模式和有头模式。
- 它提供了丰富的 API 来操作网页元素,例如输入文本、点击按钮、等待页面加载等。
LeetCode 登录自动化:
- 该项目通过 Rod 实现了对 LeetCode 登录页面的自动化操作,包括输入用户名和密码、提交表单以及判断登录结果。
页面元素定位:
- 使用 CSS 选择器(如
#id_login
和#id_password
)定位输入框。 - 使用
Race()
方法同时监听多个页面元素,确保在登录成功或失败时能够正确处理。
- 使用 CSS 选择器(如
错误处理:
- 如果登录失败,程序会抛出异常并打印错误信息。
并发处理:
Race()
方法允许同时监听多个页面元素,提高代码的灵活性和响应速度。
6.是否匹配
MustMatches()
- 作用:验证元素是否匹配指定选择器
- 返回:布尔值(隐式断言)
- 失败处理:不匹配时触发 panic
典型用法: if elm.MustMatches("[data-cy=error]") { ... }
- MustDo()
- 作用:链式调用终点方法,强制完成所有前置操作
特点:
- 自动等待元素存在
- 执行失败会触发 panic
- 适用于快速原型开发
- 示例场景: page.Race().Element(".selector").MustDo()
package main
import (
"fmt" // 导入 fmt 包,用于打印输出
"github.com/go-rod/rod" // 导入 Rod 包,用于浏览器自动化
"github.com/go-rod/rod/lib/input" // 导入 input 包,用于模拟键盘输入
)
func main() {
const username = "" // 定义用户名常量,需替换为实际用户名
const password = "" // 定义密码常量,需替换为实际密码
browser := rod.New().MustConnect() // 创建一个新的浏览器实例并连接到远程浏览器
page := browser.MustPage("https://leetcode.com/accounts/login/") // 打开 LeetCode 登录页面
page.MustElement("#id_login").MustInput(username) // 定位用户名输入框并输入用户名
page.MustElement("#id_password").MustInput(password).MustType(input.Enter) // 定位密码输入框并输入密码,然后按下回车键提交表单
// It will keep retrying until one selector has found a match
elm := page.Race().Element(".nav-user-icon-base").MustHandle(func(e *rod.Element) { // 监听登录成功的页面元素
// print the username after successful login
fmt.Println(*e.MustAttribute("title")) // 打印登录成功的用户名
}).Element("[data-cy=sign-in-error]").MustDo() // 监听登录失败的页面元素
if elm.MustMatches("[data-cy=sign-in-error]") { // 判断是否为登录失败的页面元素
// when wrong username or password
panic(elm.MustText()) // 抛出异常并打印错误信息
}
}