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

  1. 展开 wrapped error 确认是否连接/会话级问题,若是则重建浏览器会话而非重试按键
  2. 输入后先确认焦点仍在搜索框(可重新 focus),再按 Enter
  3. 改用更稳健的触发方式:searchInput.Press(input.Enter)(元素级)或点击搜索按钮
  4. 增加页面健康检查:按 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

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.