From b86d3626f1a67ea11e314db0bae94ca91c54016e Mon Sep 17 00:00:00 2001 From: zy Date: Thu, 18 Sep 2025 22:25:36 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"Revert=20PR=20#105"=20-=20=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=20publish.go=20=E5=8A=9F=E8=83=BD=20(#109)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Reapply "Merge pull request #105 from chengazhen/main" (#107) This reverts commit 81ff26d6a7886b67c8fc811eac680cfce2b4b063. * feature: 获取有效的元素 --- xiaohongshu/publish.go | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/xiaohongshu/publish.go b/xiaohongshu/publish.go index e29015e..67a20ba 100644 --- a/xiaohongshu/publish.go +++ b/xiaohongshu/publish.go @@ -41,8 +41,20 @@ func NewPublishImageAction(page *rod.Page) (*PublishAction, error) { time.Sleep(1 * time.Second) createElems := pp.MustElements("div.creator-tab") - slog.Info("foundcreator-tab elements", "count", len(createElems)) + + // 过滤掉隐藏的元素 + var visibleElems []*rod.Element for _, elem := range createElems { + if isElementVisible(elem) { + visibleElems = append(visibleElems, elem) + } + } + + if len(visibleElems) == 0 { + return nil, errors.New("没有找到上传图文元素") + } + + for _, elem := range visibleElems { text, err := elem.Text() if err != nil { slog.Error("获取元素文本失败", "error", err) @@ -267,3 +279,29 @@ func findTextboxParent(elem *rod.Element) *rod.Element { } return nil } + +// isElementVisible 检查元素是否可见 +func isElementVisible(elem *rod.Element) bool { + + // 检查是否有隐藏样式 + style, err := elem.Attribute("style") + if err == nil && style != nil { + styleStr := *style + + if strings.Contains(styleStr, "left: -9999px") || + strings.Contains(styleStr, "top: -9999px") || + strings.Contains(styleStr, "position: absolute; left: -9999px") || + strings.Contains(styleStr, "display: none") || + strings.Contains(styleStr, "visibility: hidden") { + return false + } + } + + visible, err := elem.Visible() + if err != nil { + slog.Warn("无法获取元素可见性", "error", err) + return true + } + + return visible +}