package lxrod import ( "github.com/go-rod/rod" "github.com/go-rod/rod/lib/proto" ) // vue 页面导航完成结果。如果提前停止等待则返回 false。 type NavigateResultFunc = func() (proto.PageNavigatedWithinDocument, bool) // 等待 vue hash 路由页面导航完成。 // vue router 有一个 hash 模式。页面的 url 会变成 xx.com/#/yy 的格式。 // 此时页面的“跳转”是用 url 的 fragment 模拟的,并不会触发真正的页面导航。 // 该函数会等待这种页面的跳转事件,并且返回导航的信息。如果监听提前停止则会返回 false。 // 可以给 p 的 ctx 添加 timeout 或者 cancel 来达到提前停止的目的。 func WaitVuePageNavigated(p *rod.Page) NavigateResultFunc { var e proto.PageNavigatedWithinDocument wait := p.WaitEvent(&e) return func() (proto.PageNavigatedWithinDocument, bool) { wait() return e, e != proto.PageNavigatedWithinDocument{} } }