|
@@ -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
|
|
|
+ }
|
|
|
+}
|