所以我运行这段代码,基本上你输入一个代码并按下一个按钮,然后如果代码正确,页面会重定向。
所以我希望代码使用"invisibility_of_element_located"(这样我就可以判断页面是否已加载(检测该页面上的图像是否消失,这在单独使用时工作正常,但是我想在 if 语句中使用它,这样如果元素确实不可见:
打印(某物(
但是,我似乎无法弄清楚如何以这种方式设置它。 我试过让它 == 真实,但仍然一无所获。 我也尝试过在 try 中使用它,但基本上我不知道它返回什么,所以我无法正确使用它。
if WebDriverWait(driver, 50).until(EC.invisibility_of_element_located((By.CLASS_NAME, "NXVPg Szr5J coreSpriteLock "))) == True:
print("Now its loaded")
else:
print("Nope not loaded")
当如上所述使用它时,无论是否使用 == True,它都会立即打印响应("现在已加载"(即使页面实际上没有更改。但是,当像这样使用时:
WebDriverWait(driver, 50).until(EC.invisibility_of_element_located((By.CLASS_NAME, "NXVPg Szr5J coreSpriteLock ")))
print("Now its loaded")
它实际上确实在等待并且工作正常,唯一的问题是我无法使用 else 来显示它尚未加载,任何帮助将不胜感激!
WebDriverWait
最多等待x秒,直到满足条件。如果不满足条件,它将抛出TimeoutException
。换句话说,如果条件失败,if
块将永远不会到达else
分支。
选择try-except
结构:
from selenium.common import exceptions as SE
try:
WebDriverWait(driver, 10).until(EC.invisibility_of_element_located((*<By relevant identification method here>*)))
print("Now its loaded")
except SE.TimeoutException:
print("Nope not loaded")
注意By.CLASS_NAME
不是正确的使用,因为您有多个类名("NXVPg Szr5J coreSpriteLock "
(。此处为类似问题的示例。
请改用By.CSS_SELECTOR
或By.XPATH
:
By.CSS_SELECTOR, ".NXVPg.Szr5J.coreSpriteLock "
#or
By.XPATH, "//*[@class='NXVPg Szr5J coreSpriteLock ']"