add: WaitFor method
add: Channel tag
This commit is contained in:
parent
3b7e8e94ea
commit
5912111f29
|
@ -4,7 +4,6 @@ import (
|
||||||
"intimate"
|
"intimate"
|
||||||
"log"
|
"log"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/474420502/extractor"
|
"github.com/474420502/extractor"
|
||||||
"github.com/tebeka/selenium"
|
"github.com/tebeka/selenium"
|
||||||
|
@ -14,44 +13,16 @@ func TestMain(t *testing.T) {
|
||||||
Execute()
|
Execute()
|
||||||
}
|
}
|
||||||
|
|
||||||
type WaitFor struct {
|
|
||||||
WebDriver selenium.WebDriver
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewWaitFor(wd selenium.WebDriver) *WaitFor {
|
|
||||||
return &WaitFor{WebDriver: wd}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (wf *WaitFor) Default(xpath string, do func(elements ...selenium.WebElement) bool) error {
|
|
||||||
return wf.WebDriver.WaitWithTimeout(func(wd selenium.WebDriver) (bool, error) {
|
|
||||||
elements, err := wd.FindElements(selenium.ByXPATH, xpath)
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(elements) > 0 {
|
|
||||||
if do == nil {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
if do(elements...) {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false, nil
|
|
||||||
|
|
||||||
}, time.Second*15)
|
|
||||||
}
|
|
||||||
|
|
||||||
type LiveInfo struct {
|
type LiveInfo struct {
|
||||||
Followers int64 `exp:"//div[contains(@class,'nimo-rm_followers')]//span[@class='text c2']" mth:"r:ExtractNumber"`
|
Followers int64 `exp:"//div[contains(@class,'nimo-rm_followers')]//span[@class='text c2']" mth:"r:ExtractNumber"`
|
||||||
Views int64 `exp:"//div[contains(@class,'nimo-rm_audience')]//span[@class='text c2']" mth:"r:ExtractNumber"`
|
Views int64 `exp:"//div[contains(@class,'nimo-rm_audience')]//span[@class='text c2']" mth:"r:ExtractNumber"`
|
||||||
|
Channel string `exp:"//div[contains(@class,'nimo-rm_type')]//span"`
|
||||||
Giver []int64 `exp:"//div[contains(@class,'rank-item-after3')]//span[contains(@class,'nimo-currency__count')]"`
|
Giver []int64 `exp:"//div[contains(@class,'rank-item-after3')]//span[contains(@class,'nimo-currency__count')]"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func Execute() {
|
func Execute() {
|
||||||
wd := intimate.GetChromeDriver(3031)
|
wd := intimate.GetChromeDriver(3031)
|
||||||
waitfor := NewWaitFor(wd)
|
waitfor := intimate.NewWaitFor(wd)
|
||||||
ps := intimate.NewPerfectShutdown()
|
ps := intimate.NewPerfectShutdown()
|
||||||
|
|
||||||
for !ps.IsClose() {
|
for !ps.IsClose() {
|
||||||
|
@ -78,8 +49,8 @@ func Execute() {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
waitfor.Default("//div[contains(@class,'nimo-rm_audience')]//span[@class='text c2']", nil)
|
waitfor.Default("//div[contains(@class,'nimo-rm_audience')]//span[@class='text c2']", nil)
|
||||||
|
|
||||||
pagesource, _ = wd.PageSource()
|
pagesource, _ = wd.PageSource()
|
||||||
etor := extractor.ExtractHtmlString(pagesource)
|
etor := extractor.ExtractHtmlString(pagesource)
|
||||||
li := etor.GetObjectByTag(LiveInfo{}).(*LiveInfo)
|
li := etor.GetObjectByTag(LiveInfo{}).(*LiveInfo)
|
||||||
|
|
29
utils.go
29
utils.go
|
@ -261,3 +261,32 @@ func (c *Counter) Add(n int) error {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type WaitFor struct {
|
||||||
|
WebDriver selenium.WebDriver
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWaitFor(wd selenium.WebDriver) *WaitFor {
|
||||||
|
return &WaitFor{WebDriver: wd}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (wf *WaitFor) Default(xpath string, do func(elements ...selenium.WebElement) bool) error {
|
||||||
|
return wf.WebDriver.WaitWithTimeout(func(wd selenium.WebDriver) (bool, error) {
|
||||||
|
elements, err := wd.FindElements(selenium.ByXPATH, xpath)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(elements) > 0 {
|
||||||
|
if do == nil {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
if do(elements...) {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil
|
||||||
|
|
||||||
|
}, time.Second*15)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user