Skip to content

表单与交互

📝 结构化交互:点击、输入、滚动、等待、表单。

snir 提供 InteractionActionForm 两层抽象,结构化地与页面交互。

两层抽象

  • InteractionAction:原子动作(点击/输入/滚动/等待/悬停),灵活组合
  • Form:声明式表单(字段 + 提交按钮 + 等待),一行完成登录等场景

交互动作(Actions)

SDK 工厂(CLI 经 API 的 actions 字段):

动作CSSXPath
点击ActionClick(sel)ActionClickXPath(xp)
输入ActionType(sel, val)ActionTypeXPath(xp, val)
滚动ActionScroll(sel, px)
等待时长ActionWait(d)
等待可见ActionWaitVisible(sel)ActionWaitVisibleXPath(xp)
悬停ActionHover(sel)ActionHoverXPath(xp)

表单(Form)

工厂说明
NewForm(fields...)基础表单
FormWithSubmit(sel, wait, fields...)带提交按钮
FormWithSubmitXPath(xp, wait, fields...)带提交(XPath)

字段工厂:FormInput/FormSelect/FormCheckbox/FormRadio(各有 XPath 变体)。

示例:登录后截图

go
form := sdk.FormWithSubmit("#login-btn", 3*time.Second,
    sdk.FormInput("#username", "myuser"),
    sdk.FormInput("#password", "mypass"),
    sdk.FormCheckbox("#remember"),
)

opts := sdk.NewScreenshotOptions(
    sdk.WithForm(form),
    sdk.WithCookies(),     // 采集登录后 Cookie
    sdk.WithFullPage(),
)
result, _ := sdk.SharedCapture("https://example.com/login", opts)

登录场景下,浏览器与 snir 的逐步交互时序:

交互流程

选择 CSS 还是 XPath

选型建议

  • CSS:简单、可读,多数场景够用
  • XPath:复杂层级、无 id/class 时更精确

适用场景

典型场景

  • 🔐 登录后页面截图
  • 📜 触发"加载更多"
  • ✖️ 关闭弹窗后截图
  • ⏳ 等待异步内容出现

下一步

基于 MIT 许可发布