如何使用 Python Selenium 从 div 节点读取警报信息文本?

问题描述

我正在尝试阅读选择下拉菜单显示消息的网页。当消息出现时它有类

<div class="alert alert-info border-0 rounded-0"> No update currently available </div>

我写了下面的代码来读取文本但总是得到一个异常

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import webdriverwait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

alert = webdriverwait(driver,5).until(EC.alert_is_present)
print(alert.text)

在使用 webdriver 等待时,我收到以下错误

__init__() takes 1 positional argument but 2 were given

我的目标是阅读警报类中的文本并进一步验证它。任何帮助将不胜感激。

解决方法

虽然 WebElementclass 属性包含值 alert,但它仍然没有启用 JavaScript {{ 3}} 并且您必须将其作为常规 WebElement 处理。

要打印text No update currently available,您可以使用以下任一Alert

  • 使用 css_selectorget_attribute("innerHTML")

    print(driver.find_element_by_css_selector("div.alert.alert-info").get_attribute("innerHTML"))
    
  • 使用 xpathtext 属性:

    print(driver.find_element_by_xpath("//div[contains(@class,'alert') and contains(@class,'alert-info')]").text)
    

理想情况下,您需要为 visibility_of_element_located() 引入 Locator Strategies,并且您可以使用以下任一 WebDriverWait

  • 使用 CSS_SELECTORtext 属性:

    print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"div.alert.alert-info"))).text)
    
  • 使用 XPATHget_attribute()

    print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,"//div[contains(@class,'alert-info')]"))).get_attribute("innerHTML"))
    
  • 注意:您必须添加以下导入:

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

您可以在 Locator Strategies

中找到相关讨论

参考文献

链接到有用的文档: