如果你想要在浏览器打开后执行循环任务,并为每个任务重新设置超时,可以在主上下文中保持浏览器实例的存活,并在每个循环任务中创建带超时的上下文来执行。这样可以保证浏览器不会在每个任务完成或超时后关闭,同时又能控制每个任务的执行时间。
下面是一个示例代码:
package main
import (
"context"
"fmt"
"time"
"github.com/chromedp/chromedp"
)
func main() {
// 设置浏览器启动选项
opts := append(chromedp.DefaultExecAllocatorOptions[:],
chromedp.Flag("headless", false),
chromedp.WindowSize(1200, 900),
)
// 创建浏览器执行分配器上下文
allocCtx, cancelAlloc := chromedp.NewExecAllocator(context.Background(), opts...)
defer cancelAlloc()
// 创建浏览器实例上下文
browserCtx, cancelBrowser := chromedp.NewContext(allocCtx)
defer cancelBrowser()
// 打开浏览器后,执行多个循环任务
for i := 0; i < 5; i++ {
// 每次循环创建一个带超时的上下文
timeoutCtx, cancelTimeout := context.WithTimeout(browserCtx, 10*time.Second)
// 执行任务
err := chromedp.Run(timeoutCtx,
chromedp.Navigate("https://www.example.com"),
chromedp.Sleep(2*time.Second), // 模拟一些浏览器操作
chromedp.Title(&title),
)
// 检查错误和超时情况
if err != nil && err == context.DeadlineExceeded {
fmt.Printf("任务 %d 超时\n", i+1)
} else if err != nil {
fmt.Printf("任务 %d 发生错误: %v\n", i+1, err)
} else {
fmt.Printf("任务 %d 完成,页面标题: %s\n", i+1, title)
}
// 取消当前任务的超时上下文
cancelTimeout()
// 模拟一些间隔,避免任务之间无缝衔接
time.Sleep(3 * time.Second)
}
fmt.Println("所有任务完成")
}最后
以上就是名字长了才好记最近收集整理的关于golang打开浏览器执行循环任务,每个任务重新设置超时的全部内容,更多相关golang打开浏览器执行循环任务内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复