首页 > 其他分享 >Go-Rod #3 Context and Timeout

Go-Rod #3 Context and Timeout

时间:2024-03-25 11:25:40浏览次数:25  
标签:Rod cancel Second Timeout time Go 超时 page

这个示例演示了如何设置超时操作。

package main

import (
	"math/rand"
	"time"

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

func main() {
	page := rod.New().MustConnect().MustPage("https://github.com")

	page.
		// Set a 5-second timeout for all chained methods
		Timeout(5 * time.Second).

		// The total time for MustWaitLoad and MustElement must be less than 5 seconds
		MustWaitLoad().
		MustElement("title").

		// Methods after CancelTimeout won't be affected by the 5-second timeout
		CancelTimeout().

		// Set a 10-second timeout for all chained methods
		Timeout(10 * time.Second).

		// Panics if it takes more than 10 seconds
		MustText()

	// The two code blocks below are basically the same:
	{
		page.Timeout(5 * time.Second).MustElement("a").CancelTimeout()
	}
	{
		// Use this way you can customize your own way to cancel long-running task
		page, cancel := page.WithCancel()
		go func() {
			time.Sleep(time.Duration(rand.Int())) // cancel after randomly time
			cancel()
		}()
		page.MustElement("a")
	}
}

这个示例需要注意的有几个点:

Timeout(5 * time.Second).
MustWaitLoad().
MustElement("title").

.Timeout(5 * time.Second)为后续链式调用的所有方法设置了一个5秒的超时限制。这意味着,如果MustWaitLoadMustElement("title")这两个操作中的任何一个花费的时间超过5秒,那么将会触发超时异常。

CancelTimeout().

.CancelTimeout()取消之前设置的超时限制。这使得后续的链式方法调用不再受到之前设置的5秒超时限制的约束。

Timeout(10 * time.Second).
MustText()

.Timeout(10 * time.Second)为后续的操作重新设置一个10秒的超时限制。在这个设置之后的链式调用(如MustText())必须在10秒内完成,否则会触发超时异常。

{
	page.Timeout(5 * time.Second).MustElement("a").CancelTimeout()
}
{
	// Use this way you can customize your own way to cancel long-running task
	page, cancel := page.WithCancel()
	go func() {
		time.Sleep(time.Duration(rand.Int())) // cancel after randomly time
		cancel()
	}()
	page.MustElement("a")
}

两种可替换的超时和取消方法:

  1. 第一种方法直接使用.Timeout(5 * time.Second)来设置超时,然后通过.CancelTimeout()来取消超时限制。这是一种简单的设置和取消超时的方法。
  2. 第二种方法展示了如何自定义取消操作:
    • 使用page.WithCancel()返回一个新的页面对象和一个cancel函数。
    • 启动一个goroutine,在随机时间后调用cancel函数来取消操作。这提供了更灵活的方式来根据外部条件或自定义逻辑来取消正在进行的操作。

标签:Rod,cancel,Second,Timeout,time,Go,超时,page
From: https://www.cnblogs.com/Edward6/p/18093979

相关文章

  • Django 字段类型,字段参数,以及在drf中的使用。
    字段类型#models中CharField,DecimalField.....#记住的: CharFieldIntegerFieldFloatFieldDecimalFieldDateTimeFieldDateField#知道--》models中没有的---》反序列化的时候,前端传入的{name:lqz,age:19,hobby:[篮球,足球],wife:{name:lyf,age:38}} ListF......
  • drf: 序列化和反序列化, Django Rest_Framework 介绍也安装及使用。
    序列化与返序列化序列化:将python中的数据类型转换成指定数据类型发送给别人返序列化:接收别人发送过来的数据,返序列化成我们所需要的格式。eg::前端js提供过来的json数据,对于python而言就是字符串,我们需要进行反序列化换成模型类对象,这样我们才能把数据保存到数据库中。DjangoR......
  • 【独立开发前线】Vol.16 推荐6个生成产品ICON图标产品LOGO的网站
    对于独立开发者而言,很大一个问题就是需要设计ICON和LOGO,今天为大家推荐6款神器,帮你快速搞定它们;1.IconKitchenIconKitchen2.Logofa.stLogoFast|MakeBeautifulLogosFastandFree3.Logostore.aiLogoStoreAI4.LogotouseLogoToUse-Freehigh-qualityLo......
  • 【go从入门到精通】闭包和陷阱
     作者简介:    高科,先后在IBMPlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。(谢谢你的关注) -------------......
  • 栅格地图路径规划:基于螳螂搜索算法(Mantis Search Algorithm,MSA)的机器人路径规划(提供MA
        一、机器人路径规划介绍移动机器人(Mobilerobot,MR)的路径规划是移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人......
  • Django csrf跨站请求伪造,校验,CBV忽略与允许csrf校验
    csrf跨站请求伪造钓鱼网站,搭建一个网站与正规网站一模一样的界面,用户进入到我们的网站中,给指定用户转账,汇款确实提交到银行,但是收款人确实我们自己定义的人。本质在钓鱼网站的页面针对对方账户,只给用户提供一个没有name属性的普通input框,在内部则隐藏一个已经写好的name和value......
  • Django 中间件以及自定义中间件
    Django中间件Django中间件是Django的门户请求来的时候需要先经过中间件才能达到真正的Django后端响应走的时候最后也要经过中间件才能发送出去MIDDLEWARE=['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddle......
  • djangoCIA报价平台的设计与实现(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,互联网已经深入到我们日常生活的方方面面。在众多的应用场景中,报价系统作为商业交易的重要环节,扮演着至关重要的角色。尤其是在CIA(Ce......
  • djangoAndroid共享停车位(源码+mysql+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着城市化进程的加速,汽车已成为人们日常生活中不可或缺的交通工具。然而,在许多城市中,由于停车位数量有限,停车难成为了一大问题。为了解决这一问题,共享停车......
  • Django cookie与session,CBV如何添加装饰器
    cookie与session简介会话跟踪技术什么是会话跟踪?我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了。从双方接通电话那一刻起,会话就开始了,到某......