race.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package lxrod
  2. import "github.com/go-rod/rod"
  3. // RaceVisibleElement 创建用于使用 css 选择器查询可见元素的 race 分支。
  4. func RaceVisibleElement(r *rod.RaceContext, selector string) *rod.RaceContext {
  5. return r.ElementFunc(VisibleElement(selector))
  6. }
  7. // RaceVisibleElementX 创建用于使用 xPath 查询可见元素的 race 分支。
  8. func RaceVisibleElementX(r *rod.RaceContext, xPath string) *rod.RaceContext {
  9. return r.ElementFunc(VisibleElementX(xPath))
  10. }
  11. // VisibleElement 是用于 [rod.RaceContext.ElementFunc] 的函数,用于使用 css 选择器查找可见元素。
  12. func VisibleElement(selector string) func(*rod.Page) (*rod.Element, error) {
  13. return func(p *rod.Page) (*rod.Element, error) {
  14. e, err := p.Element(selector)
  15. if err != nil {
  16. return nil, err
  17. }
  18. ok, err := e.Visible()
  19. if err != nil {
  20. return nil, err
  21. }
  22. if !ok {
  23. return nil, &rod.ElementNotFoundError{}
  24. }
  25. return e, nil
  26. }
  27. }
  28. // VisibleElementX 是用于 [rod.RaceContext.ElementFunc] 的函数,用于使用 xPath 查找可见元素。
  29. func VisibleElementX(xPath string) func(*rod.Page) (*rod.Element, error) {
  30. return func(p *rod.Page) (*rod.Element, error) {
  31. e, err := p.ElementX(xPath)
  32. if err != nil {
  33. return nil, err
  34. }
  35. ok, err := e.Visible()
  36. if err != nil {
  37. return nil, err
  38. }
  39. if !ok {
  40. return nil, &rod.ElementNotFoundError{}
  41. }
  42. return e, nil
  43. }
  44. }