
正文
python等待的函数 python中的等待
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
python如何设计一个函数,实现等待用户输入数字,超时则默认选择?
很简单,新建一个线程即可
import threading
def input_func( context ):
context[ 'data' ] = input( 'input:' )
context = { 'data' : 'default' }
t = threading.Thread( target = input_func ,args = ( context , ) )
t.start( )
t.join( 10 )#等待10秒
print( context )
相关问答
Q1: 使用python简单封装selenium常用函数
年前走查脚本代码时,发现大家对selenium功能都在重复造轮子,而且容易出现一些常见低级bug。于是在闲暇之余,封装一些常用的selenium功能。
在某些网页中,存在多个frame嵌套。而selenium提供的find_element函数只能在当前frame中查找,不能切换到其他frame中,需要从最上级frame中逐步切换(当然也可以指定xpath的绝对路径,但是一般没人这么做)。在我们写代码过程中,需要明确知道当前frame位置和需要寻找元素的frame位置。在frame切换过程中,容易因为疏忽导致frame切换错误导致元素无法找到的bug。
页面中分布的frame,可以理解为树状结构。因此我们可以采用递归的方式, 沿着某条搜索路线frame节点,依次对树中每个节点均做一次访问。
我们以163网址上的登录框为例:点击登录按钮,弹出登录iframe页面。输入框位置在iframe中,因此我们不能使用xpath获取元素位置,需要进入iframe中,然后获取元素。
手动切换ifame可能会产生bug,因此需要一套自动切换和检索frame的机制。具体代码如下:
需要注意的是:如果页面中多个frame中,存在相同的xpath元素。还是需要指定frame的路径,否则会返回搜索到的第一个元素。
强制等待
直接调用系统time.sleep函数,不管页面加载情况一定会等待指定的时间, 即使元素已被加载 。
1.如果设置的时间较长,会浪费时间
2.如果设置的时间较短,元素可能没有加载。
页面中某元素如果未能立即加载,隐式等待告诉WebDriver需等待一定的时间,然后去查找元素。默认不等待,隐式等待作用于整个WebDriver周期,只需设置一次即可。
1.在上文的find_element函数中,采用递归方式在所有frame寻找元素。若采用隐式等待,则在每个frame中都需要等待设定的时间,耗时非常长。
2.某些页面我们想要的元素已经加载完毕,但是部分其他资源未加载。隐式等待必须等待所有元素加载完毕,增加额外等待时间。
显示等待一般作用于某一个元素,在设定的时间范围内,默认每间隔0.5秒查找元素。返回被加载的元素,若超过设定的时间范围未能查找则报错。显示等待作为selenium常用的等待机制,我们来看下他的源码和机制。
driver 注释中解释为WebDriver实例,但是代码中并未有相关检测,因此可以传入任何对象
但是__repr__函数中使用到session_id属性,如果需要显示属性或者转为str对象,最好在driver对象中添加session_id属性
在until函数中,我们可以看到driver对象传入method函数。在计时结束前,在不断循环执行method函数,如果method函数有正常返回值则退出循环,否则报TimeoutException错误。
可以采用装饰器对隐式等待进行封装,这样代码更加精简
同样的,采用装饰器对其他常用的函数进行封装,例如强制等待、点击、输入文本等。
装饰器虽然很方便,但也会产生一些麻烦。例如在find_element函数递归调用过程中,理应只要执行一次装饰器函数。但因为装饰器已经装饰完毕,导致每次递归都会执行。例如强制等待的sleep函数,如果递归次数越多等待时间越长。
解除装饰器一般有两种做法:一是约定参数,当递归第二次调用时则不生效。例如
这种方式实现简单,容易理解。但是增加了参数限制,在fun函数中就不能使用first_sleep参数。
二是采用装饰器采用wrapped实现,通过访问wrapped属性获得原始函数。例如
但是某一个函数被多个装饰器装饰时,需要递归解除装饰器。例如
最后整体代码如下
这次的封装其实还存在很多问题
1.find_element函数不仅仅只是提供查找元素功能,还提供一些其他功能,因此叫element_operation更为合适。
2.find_element函数的参数过多,并且很多参数的使用并不在函数本身中,对代码阅读很不友好。
3.得小心避免参数重复问题,假设装饰器sleep和装饰器wait_time都使用time这个参数,将无法区分具体是哪个函数使用。
4.不利于扩展和维护,当功能过多时find_element的参数过于庞大。
如果只是简单地封装和使用,上面这种方式也能达到较好的效果。如果想进一步封装,建议采用链式调用方式,装饰器辅助封装。例如
这样函数的扩展性和可阅读性有较大的提升
Q2: python wait()函数问题
看了python等待的函数你发的函数python等待的函数:
def Wait(self):
self._app.MainLoop()
看名字应该是启动了阻塞循环python等待的函数,去处理app的请求python等待的函数,这个就是需要一直运行的,因为一旦停止了,python等待的函数你的app请求就没发处理了。
如果你需要启动后再执行的别的程序,可以使用多进程,把这个启动放在别的进程里去执行。
如果解决了您的问题请采纳!
如果未解决请继续追问
Q3: python基础:内置函数、方法、转义字符大全
在写python程序时,常能用到一些函数和方法,总结一下,保存起来,方便查询。
一、内置函数
# abs()获取数字绝对值
# chr(i)数字转换为字符类型
# divmod() 获取两个数值的商和余数
# enumerate() 将可遍历序列组合为索引序列
# float()转换为浮点数
# format() 格式化字符串
# int()转换为整数
# input() 接受用户输入内容
# len() 计算元素个数
# max() 返回最大值
# min() 返回最小值
# math.ceil() 返回指定数值的上舍整数
# open()打开文件并返回文件对象
# pow() 幂运算
# print()打印输出
# range() 生成器
# reversed()反转所有元素
# round()四舍五入求值
# sorted()对可迭代对象进行排序
# str() 转换为字符串
# sum() 求和
# set() 创建集合
# tuple() 将序列转换为元组
# zip()将可迭代对象打包成元组
二、方法
# append() 添加列表元素
# capitalize()首字母转换为大写
# count()字符出现次数
# close() 关闭文件
# decode() 解码字符串
# dict.keys() 获取字典所有的键
# find()字符串首次出现的索引
# f.read() 读取文件内容
# dict.update()更新字典
# dict.items() 获取字典键/值对
# dict.get() 返回指定键的值
# encode() 编码字符串
# list.sort() 排序列表元素
# index() 元素首次出现的索引
# isdigit() 判断字符串是否只由数字组成
# isupper() 是否所有字母都为大写
# isnum() 判断字符串是否由字母和数字组成
# islower() 是否所有字母都为小写
# isdecimal() 检查字符串是否只包含十进制字符
# isalpha() 检测字符串是否为纯字母
# random.shuffle()随机排序
# random.sample()返回无重复随机数列表
# random.choice() 返回一个随机元素
# random.randint() 生成指定范围的随机整数
# random.randrange() 生成指定范围的指定递增基数随机整数
# pop() 删除列表中的元素
# remove()删除列表中的指定元素
# strip()去除空格
# lstrip()去除左侧空格
# rstrip() 去除右侧空格
# readline() 读取单行内容
# root.after() Tkinter中等待一段时间后再执行命令
# str.isnumeric() 验证字符串是否为数字(适用于Unicode)
# split()分割字符串
# ord() 将字符转换为整数
# replace() 字符串替换
# ljust() 左对齐填充
# rjust() 左对齐填充
# readlines() 读取所有行内容
# datetime.datetime.now() 返回指定时区的本地日期时间
# datetime.datetime.today() 获取当前本地日期的date对象
# datetime.utcnow() 返回当前UTC时间的datetime对象
# time.strptime()把时间字符串解析为元组
# time.time()返回当前时间的时间戳
# time.sleep()暂停指定秒数
# time.strftime() 返回指定格式的日期字符串
# time.mktime() 接收时间元组并返回时间戳
# os.getcwd() 获取当前工作目录
# os.listdir() 获取指定路径下的目录和文件列表
# os.makedirs() 递归创建目录
# os.rename() 重命名目录或文件
# os.path.exists() 判断路径是否存在
# upper() 全部转换为大写字母
# lower() 全部转换为小写字母
# sys.stdout.write() 标准输出打印
# sys.stdout.flush()刷新输出
# shutil.copy() 复制单个文件到另一文件或目录
# write() 写入文件内容
# winsound.Beep() 打开电脑扬声器
# zfill() 在字符串前面填充0
三、循环语句
# break终止当前循环
# continue 终止本循环进入下一次循环
# with open() as file 以with语句打开文件(数据保存)
四、转义字符
\ 行尾续行符
\' 单引号
\'' 双引号
\a 响铃
\e 转义
\n 换行
\t 横向制表符
\f 换页
\xyy 十六进制yy代表的字符
\\反斜杠符号
\b 退格
\000 空
\v 纵向制表符
\r 回车
\0yy 八进制yy代表的字符
\other 其他的字符以普通格式输出
Q4: python里有没有等待一定时间的函数
import time
time.sleep(1)
time 模块python等待的函数的sleep可以等待若干秒
Q5: python recv函数会一直等待吗
d = s.recv(1024)
这段代码的返回值通过使用 not d 判断总是失败,于是那个循环读取的 while 就陷入了死循环,请各位帮忙看一下,谢谢!
#-*- coding:utf8 -*-
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("", 80))
s.send("GET / HTTP/1.1\r\nHost:\r\n\r\n")
tmp = []
while True:
d = s.recv(1024)
if not d:
break
tmp.append(d)
data = ''.join(tmp)
s.close()
header, html = data.split("\r\n\r\n", 1)
print header
with open("oschina.html", "wb") as f:
f.write(html)
python等待的函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python中的等待、python等待的函数的信息别忘了在本站进行查找喔。






