不断检查屏幕上是否有元素-Python Selenium

时间:2019-05-09 14:05:30

标签: python selenium

我想一直检查一个元素当前是否在网站上。该网站是动态更新的,因此,如果可能的话,我想检查它的每次更新,或者只是在一段时间内进行一次True循环。我现在有以下代码:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
while True:
    if EC.presence_of_element_located((By.CLASS_NAME, 'multiple-choice')):
        print('was mult but not quite')
        if not EC.presence_of_element_located((By.ID, 'video-loading-overlay')):
            print("hooray")
            eng = driver.find_element_by_class_name('qquestion')
            print(eng.get_attribute('text'))
            break

但是,即使在屏幕上没有任何类名称为multi_choice的元素,这仍会不断打印“杂乱而又不完全”。

2 个答案:

答案 0 :(得分:2)

更改下面的行

if not EC.presence_of_element_located((By.ID, 'video-loading-overlay')):

if (len(driver.find_elements_by_id('video-loading-overlay'))==0):

答案 1 :(得分:0)

不是检查元素,而是先检查长度计数是否大于零,然后再转到下一个元素以再次检查它。请尝试以下代码,请参阅是否有帮助。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

while True:
    if len(WebDriverWait(driver,5).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'multiple-choice'))))>0:
        print('was mult but not quite')
        if len(WebDriverWait(driver,5).until(EC.presence_of_all_elements_located((By.ID, 'video-loading-overlay'))))==0:
            print("hooray")
            eng = driver.find_element_by_class_name('qquestion')
            print(eng.get_attribute('text'))
            break
    else:
        continue