xpzouying/xiaohongshu-mcp · error
元素无可点击区域
Error message
元素无可点击区域
What it means
Raised in ClickNoWait (humanize/input.go:111) when elem.Shape() returns a shape with zero quads, meaning the browser reports no clickable geometry for the element. Without a quad there is no area to compute a center point or jitter target for the humanized mouse move/click.
Source
Thrown at humanize/input.go:111
}
Delay(elem.Page().GetContext(), PointerSettle)
if err := elem.WaitEnabled(); err != nil {
return err
}
return pressAndRelease(mouse)
}
// ClickNoWait 跳过 WaitInteractable 的遮挡重试,用于它会误判而死等的场景。
func ClickNoWait(elem *rod.Element) error {
shape, err := elem.Shape()
if err != nil {
return err
}
if len(shape.Quads) == 0 {
return errors.New("元素无可点击区域")
}
q := shape.Quads[0]
center := proto.Point{X: (q[0] + q[4]) / 2, Y: (q[1] + q[5]) / 2}
target := jitterInQuad(center, q)
if err := ensureClickable(elem, target); err != nil {
return err
}
mouse := elem.Page().Mouse
if err := moveMouseCurved(mouse, target); err != nil {
return err
}
return pressAndRelease(mouse)
}
func MoveTo(page *rod.Page, pt proto.Point) error {View on GitHub (pinned to 332d196854)
Solutions
- Wait for the element to be visible/laid out (rod WaitVisible / page.WaitStable) before calling ClickNoWait
- Re-acquire the element handle if the DOM was re-rendered
- Use humanize.Click (which waits for interactability) instead of ClickNoWait for elements that may not be ready
- Check the element is not display:none / zero-size; pick a visible parent or sibling trigger instead
Example fix
// before
el, _ := page.Element("#go")
err := humanize.ClickNoWait(el)
// after
el := page.MustWaitVisible("#go")
err := humanize.Click(el) // waits for interactability internally Defensive patterns
Strategy: validation
Validate before calling
shape, err := elem.Shape()
if err == nil && len(shape.Quads) > 0 { /* clickable area exists */ } Type guard
func hasClickArea(elem *rod.Element) bool {
s, err := elem.Shape()
return err == nil && len(s.Quads) > 0
} Try / catch
if err := humanize.ClickNoWait(el); err != nil {
if strings.Contains(err.Error(), "无可点击区域") {
el = page.MustElement(selector) // re-acquire and retry
}
return err
} Prevention
- Prefer humanize.Click over ClickNoWait when readiness is uncertain
- Verify element is not display:none or zero-size
- Refresh element handles after DOM mutations
When it happens
Trigger: Calling humanize.ClickNoWait on an element that is display:none, detached from the DOM, or has zero-size layout — Shape() then yields len(shape.Quads)==0 and the error is returned.
Common situations: Clicking elements before the page finished layout; stale element handles after SPA re-render; clicking hidden inputs or elements with display:none used purely as data holders.
Related errors
AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05).
Data as JSON: /api/errors/ed642f75cc0ea12c.
Report an issue: GitHub.