xpzouying/xiaohongshu-mcp · error

上传第%d张图片失败

Error message

上传第%d张图片失败

What it means

uploadImages 定位到第 i+1 张的输入框后 SetFiles 设置文件失败:文件读取异常或 go-rod 与页面 DOM 交互中断,导致该张图片未真正上传。

Source

Thrown at xiaohongshu/publish.go:257

func uploadImages(page *rod.Page, imagesPaths []string) error {
	validPaths := make([]string, 0, len(imagesPaths))
	for _, path := range imagesPaths {
		if _, err := os.Stat(path); os.IsNotExist(err) {
			logrus.Warnf("图片文件不存在: %s", path)
			continue
		}
		validPaths = append(validPaths, path)
		logrus.Infof("获取有效图片:%s", path)
	}

	// 逐张上传:每张上传后等待预览出现,再上传下一张
	for i, path := range validPaths {
		uploadInput, err := findImageUploadInput(page, i == 0)
		if err != nil {
			return errors.Wrapf(err, "查找上传输入框失败(第%d张)", i+1)
		}
		if err := uploadInput.SetFiles([]string{path}); err != nil {
			return errors.Wrapf(err, "上传第%d张图片失败", i+1)
		}

		slog.Info("图片已提交上传", "index", i+1, "path", path)

		// 等待当前图片上传完成(预览元素数量达到 i+1),最多等 60 秒
		if err := waitForUploadComplete(page, i+1); err != nil {
			return errors.Wrapf(err, "第%d张图片上传超时", i+1)
		}
		time.Sleep(1 * time.Second)
	}

	return nil
}

// findImageUploadInput 查找图片上传的输入框
func findImageUploadInput(page *rod.Page, first bool) (*rod.Element, error) {
	if first {
		return page.Element(".upload-input")

View on GitHub (pinned to 332d196854)

Solutions

  1. 确认图片文件存在且可读
  2. 重试该张图片上传
  3. 检查页面是否中途刷新
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at xiaohongshu/publish.go:257 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of xpzouying/xiaohongshu-mcp@332d196854 (2026-09-05). Data as JSON: /api/errors/1e2520f58a3319b4. Report an issue: GitHub.