问题描述
我正在尝试阅读选择下拉菜单后显示消息的网页。当消息出现时它有类
<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
我的目标是阅读警报类中的文本并进一步验证它。任何帮助将不胜感激。
解决方法
虽然 WebElement 的 class 属性包含值 alert
,但它仍然没有启用 JavaScript {{ 3}} 并且您必须将其作为常规 WebElement 处理。
要打印text No update currently available
,您可以使用以下任一Alert:
-
使用
css_selector
和get_attribute("innerHTML")
:print(driver.find_element_by_css_selector("div.alert.alert-info").get_attribute("innerHTML"))
-
使用
xpath
和 text 属性:print(driver.find_element_by_xpath("//div[contains(@class,'alert') and contains(@class,'alert-info')]").text)
理想情况下,您需要为 visibility_of_element_located()
引入 Locator Strategies,并且您可以使用以下任一 WebDriverWait:
-
使用
CSS_SELECTOR
和 text 属性:print(WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"div.alert.alert-info"))).text)
-
使用
XPATH
和get_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
中找到相关讨论参考文献
链接到有用的文档:
-
How to retrieve the text of a WebElement using Selenium - Python 方法
Gets the given attribute or property of the element.
-
get_attribute()
属性返回The text of the element.
text