mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-04 23:16:57 +08:00
refactor: enter live room by tap screen center
This commit is contained in:
@@ -111,43 +111,6 @@ func (vc *VideoCrawler) isTargetAchieved() bool {
|
|||||||
return vc.isFeedTargetAchieved() && vc.isLiveTargetAchieved()
|
return vc.isFeedTargetAchieved() && vc.isLiveTargetAchieved()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (vc *VideoCrawler) getLiveEntryPoint(video *Video) (enterPoint PointF, err error) {
|
|
||||||
// take screenshot and get OCR texts via image service
|
|
||||||
texts, err := vc.driverExt.GetScreenTexts()
|
|
||||||
if err != nil {
|
|
||||||
return PointF{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// 预览流入口:DY/KS
|
|
||||||
// 标签文案:点击进入直播间|进入直播间领金币
|
|
||||||
points, err := texts.FindTexts([]string{".*进入直播间.*"}, WithScope(0, 0.3, 1, 0.8), WithRegex(true))
|
|
||||||
if err == nil {
|
|
||||||
return points[0].Center(), nil
|
|
||||||
}
|
|
||||||
// 标签文案:直播中|直播卖货|直播团购
|
|
||||||
points, err = texts.FindTexts([]string{"直播中|直播卖货|直播团购"},
|
|
||||||
WithScope(0, 0.7, 0.5, 1), WithRegex(true))
|
|
||||||
if err == nil {
|
|
||||||
return points[0].Center(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// 预览流入口:KS/KSLite
|
|
||||||
// 评论框文案:和主播聊聊天...|聊聊天...
|
|
||||||
points, err = texts.FindTexts([]string{".*聊聊天.*"}, WithRegex(true))
|
|
||||||
if err == nil {
|
|
||||||
point := points[0].Center()
|
|
||||||
enterPoint = PointF{
|
|
||||||
X: point.X,
|
|
||||||
Y: point.Y - 300,
|
|
||||||
}
|
|
||||||
return enterPoint, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: 头像入口
|
|
||||||
|
|
||||||
return PointF{}, errors.New("live entry not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
// run live video crawler
|
// run live video crawler
|
||||||
func (vc *VideoCrawler) startLiveCrawler(enterPoint PointF) error {
|
func (vc *VideoCrawler) startLiveCrawler(enterPoint PointF) error {
|
||||||
log.Info().Msg("enter live room")
|
log.Info().Msg("enter live room")
|
||||||
@@ -331,20 +294,20 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
|
|||||||
dExt.cacheStepData.screenResults[time.Now().String()] = screenResult
|
dExt.cacheStepData.screenResults[time.Now().String()] = screenResult
|
||||||
|
|
||||||
switch feedVideo.Type {
|
switch feedVideo.Type {
|
||||||
case VideoType_PreviewLive:
|
case VideoType_PreviewLive, VideoType_Live:
|
||||||
// 直播预览流
|
// 直播预览流 || 直播
|
||||||
log.Info().Msg("get preview live video")
|
log.Info().Str("type", string(feedVideo.Type)).Msg("get live video")
|
||||||
if crawler.isLiveTargetAchieved() {
|
if crawler.isLiveTargetAchieved() {
|
||||||
log.Info().Msg("live count achieved, skip")
|
log.Info().Msg("live count achieved, skip")
|
||||||
} else {
|
} else {
|
||||||
// live target not achieved, enter live
|
// live target not achieved, enter live
|
||||||
enterPoint, err := crawler.getLiveEntryPoint(feedVideo)
|
entryPoint := PointF{
|
||||||
if err != nil {
|
X: float64(dExt.windowSize.Width / 2),
|
||||||
log.Error().Err(err).Msg("get live entry failed")
|
Y: float64(dExt.windowSize.Height / 2),
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// start live crawler
|
// start live crawler
|
||||||
err = crawler.startLiveCrawler(enterPoint)
|
err = crawler.startLiveCrawler(entryPoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, code.TimeoutError) || errors.Is(err, code.InterruptError) {
|
if errors.Is(err, code.TimeoutError) || errors.Is(err, code.InterruptError) {
|
||||||
return err
|
return err
|
||||||
@@ -354,11 +317,6 @@ func (dExt *DriverExt) VideoCrawler(configs *VideoCrawlerConfigs) (err error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
case VideoType_Live:
|
|
||||||
// 直播
|
|
||||||
log.Warn().Msg("get live video in feed loop")
|
|
||||||
crawler.exitLiveRoom()
|
|
||||||
|
|
||||||
case VideoType_Image:
|
case VideoType_Image:
|
||||||
// 图文
|
// 图文
|
||||||
log.Info().
|
log.Info().
|
||||||
|
|||||||
Reference in New Issue
Block a user