nimo 插件优化
nimo 数据测试提取成功
This commit is contained in:
9
extractor/nimo_extractor/nimo_extractor.go
Normal file
9
extractor/nimo_extractor/nimo_extractor.go
Normal file
@@ -0,0 +1,9 @@
|
||||
package main
|
||||
|
||||
import "intimate"
|
||||
|
||||
// sstore 源存储实例, 为存储源数据的实现. 表格具体参考sql/intimate_source.sql
|
||||
var sstore *intimate.StoreSource = intimate.NewStoreSource(string(intimate.STNimo))
|
||||
|
||||
// estore 解析存储连接实例
|
||||
var estore *intimate.StoreExtractor = intimate.NewStoreExtractor()
|
||||
88
extractor/nimo_extractor/nimo_extractor_test.go
Normal file
88
extractor/nimo_extractor/nimo_extractor_test.go
Normal file
@@ -0,0 +1,88 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"intimate"
|
||||
"log"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/474420502/extractor"
|
||||
"github.com/tebeka/selenium"
|
||||
)
|
||||
|
||||
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"`
|
||||
Giver []int64 `exp:"//div[contains(@class,'rank-item-after3')]//span[contains(@class,'nimo-currency__count')]"`
|
||||
}
|
||||
|
||||
func Execute() {
|
||||
wd := intimate.GetChromeDriver(3031)
|
||||
waitfor := NewWaitFor(wd)
|
||||
ps := intimate.NewPerfectShutdown()
|
||||
|
||||
for !ps.IsClose() {
|
||||
// streamer, err := estore.Pop(intimate.PNimo)
|
||||
// if err != nil {
|
||||
// log.Println(err)
|
||||
// // estore.UpdateError(streamer, err)
|
||||
// continue
|
||||
// }
|
||||
// log.Println(streamer)
|
||||
var pagesource string
|
||||
// wd.Get(streamer.LiveUrl.String)
|
||||
wd.Get("https://www.nimo.tv/live/1253835677")
|
||||
|
||||
waitfor.Default("//div[contains(@class,'nimo-rm_followers')]//span[@class='text c2' and text() != '']", nil)
|
||||
waitfor.Default("//div[contains(@class,'rank-item-top3')]", nil)
|
||||
element, err := wd.FindElement(selenium.ByXPATH, "//div[contains(@class,'rank-item-top3')]")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
} else {
|
||||
err = element.MoveTo(50, 50)
|
||||
element.Click()
|
||||
if err != nil {
|
||||
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)
|
||||
log.Printf("%#v", li)
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ func main() {
|
||||
// var err error
|
||||
|
||||
for !ps.IsClose() {
|
||||
streamer, err := estore.PopNoWait(intimate.Ptwitch, "tags is NULL", 15)
|
||||
streamer, err := estore.Pop(intimate.Ptwitch)
|
||||
if streamer == nil || err != nil {
|
||||
if err != lasterr {
|
||||
log.Println(err, lasterr)
|
||||
|
||||
Reference in New Issue
Block a user