等待Python中存在的元素

等待Python中存在的元素,python,selenium,timeout,Python,Selenium,Timeout,我有一个正在运行的代码,但有时我会在30秒内超时,有时会在80秒或更长时间内超时(取决于服务器端),所以问题是——如何让我的代码在我可以查看元素后停止,而不是等到过了120秒? 好吧,我试图实现的是,一旦元素没有出现在屏幕上,就停止代码: def isElementPresent(self): try: wait = WebDriverWait(self.driver, 120) wait.until(EC.invisibilit

我有一个正在运行的代码,但有时我会在30秒内超时,有时会在80秒或更长时间内超时(取决于服务器端),所以问题是——如何让我的代码在我可以查看元素后停止,而不是等到过了120秒? 好吧,我试图实现的是,一旦元素没有出现在屏幕上,就停止代码:

 def isElementPresent(self):
        try:
            wait = WebDriverWait(self.driver, 120)
            wait.until(EC.invisibility_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
        except TimeoutException:
            print('Camera Timeout')
从中,尝试位于的元素的可见性条件:

def isElementPresent(self):
    while True:
        try:
            wait = WebDriverWait(self.driver, 120)
            wait.until(EC.visibility_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
            break
        except TimeoutException:
            print('Camera Timeout')
            pass

您需要删除while循环。只需使用WebDriverWait

def isElementPresent(self):
    wait = WebDriverWait(self.driver, 120)
    try:
        wait.until(EC.presence_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
    except TimeoutException:
        print('The element appears')
    try:
        wait.until(EC.invisibility_of_element_located((By.NAME, 'GETTING NEW IMAGE FROM HOME SYSTEM')))
    except TimeoutException:
        print('The element does not disappear')

什么是“从家庭系统获取新图像”?是否每次循环都会更改该值?我只是好奇你为什么需要那个循环。不,这个名字一直都是一样的。只是在相机改变图像时出现和消失我不敢相信有时你会在30或80秒内超时。当它进入循环时,它将等待元素120秒。如果找到元素,它将立即中断
循环。否则,它将打印“相机超时”,然后转到下一个循环,并等待元素120秒。再一次。关键是超时错误始终为120秒。但是,中断循环的时间取决于找到元素所需的时间。没错,我不想一直等待120秒,因为这可能需要更少的时间,但程序仍在等待。您在哪里调用
isElementPresent
?您可以显示更多的代码吗?尝试了这个,仍然等待120秒,但是元素在此之前已经消失了,我很抱歉。你会等到元素消失吗?抱歉误解了。我一直等到看到元素。然后我等到它消失,是吗