xpzouying/xiaohongshu-mcp · error
触发搜索失败
Error message
触发搜索失败
What it means
searchAndSelectProduct 输入关键词后用 page.Keyboard.Press(input.Enter) 触发搜索失败:键盘事件派发失败(页面焦点异常或 CDP 输入被拒绝),搜索未执行。
Source
Thrown at xiaohongshu/publish.go:1280
if err != nil {
return errors.Wrap(err, "未找到商品搜索框")
}
// 2. 清空并输入关键词。SelectAllText 走 Eval(this.select()),只改选区、不额外
// 派发事件,暂时保留(换键盘全选要区分 Ctrl/Cmd)。
if err := searchInput.SelectAllText(); err != nil {
slog.Warn("选择搜索框文本失败", "error", err)
}
time.Sleep(100 * time.Millisecond)
if err := humanize.Type(ctx, searchInput, keyword); err != nil {
return errors.Wrap(err, "输入搜索关键词失败")
}
time.Sleep(300 * time.Millisecond)
// 3. 触发搜索(模拟键盘 Enter)
if err := page.Keyboard.Press(input.Enter); err != nil {
return errors.Wrap(err, "触发搜索失败")
}
// 4. 等待搜索结果加载
time.Sleep(1 * time.Second)
// 等待 loading 消失(使用与工作代码相同的选择器)
deadline := time.Now().Add(10 * time.Second)
for time.Now().Before(deadline) {
loading, err := modal.Element(".goods-list-loading")
if err != nil || loading == nil {
break
}
visible, _ := loading.Visible()
if !visible {
break
}
time.Sleep(100 * time.Millisecond)
}View on GitHub (pinned to 332d196854)
Solutions
- 展开 wrapped error 确认是否连接/会话级问题,若是则重建浏览器会话而非重试按键
- 输入后先确认焦点仍在搜索框(可重新 focus),再按 Enter
- 改用更稳健的触发方式:searchInput.Press(input.Enter)(元素级)或点击搜索按钮
- 增加页面健康检查:按 Enter 前 page.MustWaitStable / 检查 target 存活
Example fix
// before
if err := page.Keyboard.Press(input.Enter); err != nil {
return errors.Wrap(err, "触发搜索失败")
}
// after
if err := searchInput.Press(input.Enter); err != nil {
return errors.Wrap(err, "触发搜索失败")
} Defensive patterns
Strategy: try-catch
Validate before calling
if err := page.AssertExists("body"); err != nil {
return errors.New("页面不可用,无法触发搜索")
} Try / catch
if err := page.Keyboard.Press(input.Enter); err != nil {
if errors.Is(err, context.Canceled) || strings.Contains(err.Error(), "target closed") {
return fmt.Errorf("页面会话已失效,需重建浏览器: %w", err)
}
return errors.Wrap(err, "触发搜索失败")
} Prevention
- 优先使用元素级 Press(searchInput.Press)而非 page 级键盘
- 确保输入后焦点仍在搜索框
- 长任务中检测浏览器/页面连接健康状态
- 按键后校验搜索结果出现作为成功判据
- 对 target closed 类错误走重建会话路径而非重试
When it happens
Trigger: page.Keyboard.Press 返回非 nil:页面/浏览器连接异常、CDP Input.dispatchKeyEvent 失败、页面正在跳转或 target 已关闭。
Common situations: 浏览器实例被关闭或 tab 崩溃;页面导航中断开 CDP 会话;输入后前端立即重渲染导致页面 context 异常;自动化长时间运行后连接失效。
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/da73a9e0b08154fb.
Report an issue: GitHub.