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