欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

selenium中不想使用time.sleep()函数暂停程序怎么办?

程序员文章站 2022-03-27 13:49:26
在我刚刚学习使用selenium的时候,就会出现NoSuchElementException的错误。第一种方案是使用Python中time模块的sleep函数,使程序暂停运行。但是如果需要点击很多次这种方法就需要等很久。下面是我的解决方案第一种:selenium的内置方法:implicitly_wait()如下:from selenium import webdriverdriver = webdriver.Chrome()#设置最大等待时长driver.implicitly_wait(...

在我刚刚学习使用selenium的时候,就会出现NoSuchElementException的错误。
第一种方案是使用Python中time模块的sleep函数,使程序暂停运行。
但是如果需要点击很多次这种方法就需要等很久。
下面是我的解决方案

第一种:
selenium的内置方法:implicitly_wait()
如下:

from selenium import webdriver
driver = webdriver.Chrome()
#设置最大等待时长
driver.implicitly_wait(10)
#寻找元素
driver.find_element_by_id('xxxxx')

如果找不到元素,那么每隔 半秒钟 会再找一次,直到找到该元素或者过了最大等待时长。

这种方法叫做隐式等待
注意:
设置了隐式等待,那么在整个webdriver实例对象的声明周期内,会影响正常的响应。

第二种:
这种方案是我个人的想法,如有错误,希望各位斧正。
这种方法是在代码的开头定义一个函数,让程序在找不到该元素时继续下一轮的寻找。

代码如下:
from selenium import webdriver

#定义函数
#driver是webdriver的一个实例对象
#x是需要寻找的元素的地址
def search_wait(driver,x):
	#设置一个死循环
	while True:
		#try-except命令是Python内置的,作用是在try分支下的代码报错时程序不退出,而是执行except分支的内容。
		try:
			#这里寻找元素的方法随意,我个人比较喜欢xpath,方便。
			#后面的click()可以不加,看具体情况吧,如果点击的次数比较多,加上可能更好?
			driver.find_element_by_xpath(x).click()
			#如果找到元素,退出循环
			break
		except#如果没有找到元素,进入下一次循环,继续寻找
			continue

定义了这样的一个函数之后,我们就可以在寻找某个元素点击它的时候,使用下面的代码:

search_wait(driver,'//*[@id="xxxxx"]')

另外,如果你有输入的需求,你可以在定义的函数中再加入一个参数,来满足点击、输入
例如:

from selenium import webdriver
def search_input(driver,x,condittion,text):
	#condition参数是表明你想搜索、点击或者输入
	#text是想输入的文本
	while True:
		try:
			#仅仅搜索元素
			if condition == 'sousuo':		
				driver.find_element_by_xpath(x)
			#搜索并点击元素
			elif condition == 'sousuo_dianji':	
				driver.find_element_by_xpath(x).click()
			#搜索并输入内容
			else:			
				driver.find_element_by_xpath(x).send_keys(text)
			#成功后退出循环,否则进入下一个循环				
			break
		except:
			continue

实例:

#搜索
search_input(driver,'元素地址','sousuo')
#搜索并点击
search_input(driver,'元素地址','sousuo_dianji')
#搜索并输入
search_input(driver,'元素地址','shuru','这里写你想要输入的内容')

当然,判断的条件可以自己随便设置,比如1、2、3之类的。

以上就是我个人的一点看法。

本文地址:https://blog.csdn.net/swift_taylor/article/details/110478321

相关标签: python selenium