我想一直检查一个元素当前是否在网站上。该网站是动态更新的,因此,如果可能的话,我想检查它的每次更新,或者只是在一段时间内进行一次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的元素,这仍会不断打印“杂乱而又不完全”。
答案 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