Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

当前页面点a链接打开下一个页面使用MustWaitOpen会一直阻塞中问题 #826

Closed
zhangya4548 opened this issue Mar 3, 2023 · 3 comments
Labels
question Questions related to rod

Comments

@zhangya4548
Copy link

zhangya4548 commented Mar 3, 2023

  1. Rod Version: v0.112.6

当前页面点a链接打开下一个页面使用MustWaitOpen会一直阻塞中问题

package main

import (
	"context"
	"errors"
	"fmt"
	"strings"
	"time"

	"github.com/go-rod/rod"
	"github.com/go-rod/rod/lib/launcher"
)

func main() {
	run3()
}

func run3() error {
	err := rod.Try(func() {
		// 创建浏览器启动器
		l := launcher.New().
			Headless(false)
		// 获取调试链接
		controlURL, _ := l.Launch()

		// 连接到浏览器
		browser := rod.New().
			Trace(true). // todo 设置true才能看到鼠标轨迹
			ControlURL(controlURL).
			MustConnect()
		defer browser.Close()

		page := browser.MustPage()
		// 设置头
		page.MustSetExtraHeaders("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36")
		page.Timeout(60 * time.Second).MustNavigate("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=scrm&fenlei=256&oq=scrm&rsv_pq=8007612900055065&rsv_t=abddmB2geAChWQoEyvOEvtHuqTL4p1pLlKq8rIZqyLeyBQDLIdp5LMjmPgA&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_btype=t")
		time.Sleep(time.Second * 5)

		// 滚动到元素
		page.MustElement("#page > div > a").MustScrollIntoView()
		aArr := page.Timeout(60 * time.Second).MustElements("#page > div > a")
		var next *rod.Element
		for _, a := range aArr {
			aName := a.MustText()
			fmt.Println(aName)
			fmt.Println(a.MustHTML())
			href := a.MustAttribute("href")
			if href == nil {
				continue
			}
			fmt.Println(*href)
			if strings.Contains(aName, "下一页") {
				next = a
			}
		}

		if next == nil {
			return
		}

		// 标记等待当前页面打开下一个页面
		wait := page.MustWaitOpen()
		next.MustClick()
		newPage := wait() // todo 程序会一直阻塞在这里
		defer newPage.MustClose()

		return
	})

	if errors.Is(err, context.DeadlineExceeded) {
		return fmt.Errorf("超时错误")
	} else if err != nil {
		return fmt.Errorf("解析页面异常:%s", err)
	}

	return nil
}
@zhangya4548 zhangya4548 added the question Questions related to rod label Mar 3, 2023
@ysmood
Copy link
Member

ysmood commented Mar 3, 2023

请去掉不影响问题结果的代码

@ysmood
Copy link
Member

ysmood commented Mar 3, 2023

#322

@ysmood ysmood closed this as not planned Won't fix, can't repro, duplicate, stale Mar 3, 2023
@ysmood ysmood reopened this Mar 3, 2023
@ysmood
Copy link
Member

ysmood commented Mar 4, 2023

你这个点击“下一页”只会在当前页面导航,浏览器并没有创建新页面

@ysmood ysmood closed this as completed Mar 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Questions related to rod
Projects
None yet
Development

No branches or pull requests

2 participants