Browse Source

feat: race 查询扩展函数

wangkang 1 week ago
parent
commit
a02ee6fa6c
1 changed files with 49 additions and 0 deletions
  1. 49 0
      common/lxrod/race.go

+ 49 - 0
common/lxrod/race.go

@@ -0,0 +1,49 @@
+package lxrod
+
+import "github.com/go-rod/rod"
+
+// RaceVisibleElement 创建用于使用 css 选择器查询可见元素的 race 分支。
+func RaceVisibleElement(r *rod.RaceContext, selector string) *rod.RaceContext {
+	return r.ElementFunc(VisibleElement(selector))
+}
+
+// RaceVisibleElementX 创建用于使用 xPath 查询可见元素的 race 分支。
+func RaceVisibleElementX(r *rod.RaceContext, xPath string) *rod.RaceContext {
+	return r.ElementFunc(VisibleElementX(xPath))
+}
+
+// VisibleElement 是用于 [rod.RaceContext.ElementFunc] 的函数,用于使用 css 选择器查找可见元素。
+func VisibleElement(selector string) func(*rod.Page) (*rod.Element, error) {
+	return func(p *rod.Page) (*rod.Element, error) {
+		e, err := p.Element(selector)
+		if err != nil {
+			return nil, err
+		}
+		ok, err := e.Visible()
+		if err != nil {
+			return nil, err
+		}
+		if !ok {
+			return nil, &rod.ElementNotFoundError{}
+		}
+		return e, nil
+	}
+}
+
+// VisibleElementX 是用于 [rod.RaceContext.ElementFunc] 的函数,用于使用 xPath 查找可见元素。
+func VisibleElementX(xPath string) func(*rod.Page) (*rod.Element, error) {
+	return func(p *rod.Page) (*rod.Element, error) {
+		e, err := p.ElementX(xPath)
+		if err != nil {
+			return nil, err
+		}
+		ok, err := e.Visible()
+		if err != nil {
+			return nil, err
+		}
+		if !ok {
+			return nil, &rod.ElementNotFoundError{}
+		}
+		return e, nil
+	}
+}