update rm popup window (#202)

This commit is contained in:
zy
2025-10-04 23:22:28 +08:00
committed by GitHub
parent 678bc71ae0
commit d84bf2e9a2

View File

@@ -38,7 +38,10 @@ func NewPublishImageAction(page *rod.Page) (*PublishAction, error) {
pp.MustNavigate(urlOfPublic).MustWaitIdle().MustWaitDOMStable()
time.Sleep(1 * time.Second)
mustClickPublishTab(page, "上传图文")
if err := mustClickPublishTab(page, "上传图文"); err != nil {
logrus.Errorf("点击上传图文 TAB 失败: %v", err)
return nil, err
}
time.Sleep(1 * time.Second)
@@ -77,62 +80,99 @@ func removePopCover(page *rod.Page) {
}
// 兜底:点击一下空位置吧
clickEmptyPosition(page) // 点击空位置
clickEmptyPosition(page)
}
func clickEmptyPosition(page *rod.Page) {
x := 380 + rand.Intn(100)
y := 20 + rand.Intn(60)
page.Mouse.MustMoveTo(float64(x), float64(y)).MustClick(proto.InputMouseButtonLeft)
logrus.Infof("点击空位置: x=%d, y=%d", x, y)
}
func mustClickPublishTab(page *rod.Page, tabname string) error {
removePopCover(page) // 移除弹窗封面
page.MustElement(`div.upload-content`).MustWaitVisible()
time.Sleep(1 * time.Second)
createElems := page.MustElements("div.creator-tab")
// 过滤掉隐藏的元素
var visibleElems []*rod.Element
for _, elem := range createElems {
if isElementVisible(elem) {
visibleElems = append(visibleElems, elem)
}
}
if len(visibleElems) == 0 {
return errors.Errorf("没有找到发布 TAB - %s", tabname)
}
var clicked bool
for _, elem := range visibleElems {
text, err := elem.Text()
deadline := time.Now().Add(15 * time.Second)
for time.Now().Before(deadline) {
tab, blocked, err := getTabElement(page, tabname)
if err != nil {
logrus.Errorf("获取元素文本失败: %v", err)
logrus.Warnf("获取发布 TAB 元素失败: %v", err)
time.Sleep(200 * time.Millisecond)
continue
}
if text == tabname {
if err := elem.Click(proto.InputMouseButtonLeft, 1); err != nil {
logrus.Errorf("点击元素失败: %v", err)
continue
}
clicked = true
break
if tab == nil {
time.Sleep(200 * time.Millisecond)
continue
}
if blocked {
logrus.Info("发布 TAB 被遮挡,尝试移除遮挡")
removePopCover(page)
time.Sleep(200 * time.Millisecond)
continue
}
if err := tab.Click(proto.InputMouseButtonLeft, 1); err != nil {
logrus.Warnf("点击发布 TAB 失败: %v", err)
time.Sleep(200 * time.Millisecond)
continue
}
return nil
}
if !clicked {
return errors.Errorf("没有找到发布 TAB - %s", tabname)
return errors.Errorf("没有找到发布 TAB - %s", tabname)
}
func getTabElement(page *rod.Page, tabname string) (*rod.Element, bool, error) {
elems, err := page.Elements("div.creator-tab")
if err != nil {
return nil, false, err
}
return nil
for _, elem := range elems {
if !isElementVisible(elem) {
continue
}
text, err := elem.Text()
if err != nil {
logrus.Debugf("获取发布 TAB 文本失败: %v", err)
continue
}
if strings.TrimSpace(text) != tabname {
continue
}
blocked, err := isElementBlocked(elem)
if err != nil {
return nil, false, err
}
return elem, blocked, nil
}
return nil, false, nil
}
func isElementBlocked(elem *rod.Element) (bool, error) {
result, err := elem.Eval(`() => {
const rect = this.getBoundingClientRect();
if (rect.width === 0 || rect.height === 0) {
return true;
}
const x = rect.left + rect.width / 2;
const y = rect.top + rect.height / 2;
const target = document.elementFromPoint(x, y);
return !(target === this || this.contains(target));
}`)
if err != nil {
return false, err
}
return result.Value.Bool(), nil
}
func uploadImages(page *rod.Page, imagesPaths []string) error {