add: WaitFor method
add: Channel tag
This commit is contained in:
parent
3b7e8e94ea
commit
5912111f29
|
@ -4,7 +4,6 @@ import (
|
|||
"intimate"
|
||||
"log"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/474420502/extractor"
|
||||
"github.com/tebeka/selenium"
|
||||
|
@ -14,44 +13,16 @@ func TestMain(t *testing.T) {
|
|||
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 {
|
||||
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"`
|
||||
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')]"`
|
||||
}
|
||||
|
||||
func Execute() {
|
||||
wd := intimate.GetChromeDriver(3031)
|
||||
waitfor := NewWaitFor(wd)
|
||||
waitfor := intimate.NewWaitFor(wd)
|
||||
ps := intimate.NewPerfectShutdown()
|
||||
|
||||
for !ps.IsClose() {
|
||||
|
@ -78,8 +49,8 @@ func Execute() {
|
|||
log.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
waitfor.Default("//div[contains(@class,'nimo-rm_audience')]//span[@class='text c2']", nil)
|
||||
|
||||
pagesource, _ = wd.PageSource()
|
||||
etor := extractor.ExtractHtmlString(pagesource)
|
||||
li := etor.GetObjectByTag(LiveInfo{}).(*LiveInfo)
|
||||
|
|
29
utils.go
29
utils.go
|
@ -261,3 +261,32 @@ func (c *Counter) Add(n int) error {
|
|||
}
|
||||
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