如何在 Python 中使用 Selenium WebDriver 获取文本

我试图使用 Selenium WebDriver 获取文本,这里是我的代码。请注意,我不想使用 XPath,因为在我的情况下,ID 会在每次重新启动网页时更改。

我的代码:

text = driver.find_element_by_class_name("current-stage").getText("my text")

HTML:

<span class="current-text" id="yui_3_7_0_4_1389185744113_384">my text</span>

我该怎么补救?

409098 次浏览

你只需要 .text

然后你可以验证它 之后你已经得到了它,不要试图传递什么你 期待它应该有。

答案是:

driver.find_element_by_class_name("ctsymbol").text

你可使用:

element = driver.find_element_by_class_name("class_name").text

这将返回元素中的文本,并允许您在此之后对其进行验证。

这是正确的答案。它工作了! !

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait


driver = webdriver.Chrome("E:\\Python\\selenium\\webdriver\\chromedriver.exe")
driver.get("https://www.tatacliq.com/global-desi-navy-embroidered-kurta/p-mp000000000876745")
driver.set_page_load_timeout(45)
driver.maximize_window()
driver.implicitly_wait(2)
driver.get_screenshot_as_file("E:\\Python\\Tatacliq.png")
print ("Executed Successfully")
driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").click()
SpecialPrice = driver.find_element_by_xpath("//div[@class='pdp-promo-title pdp-title']").text
print(SpecialPrice)

巨蟒

element.text

爪哇咖啡

element.getText()

C #

element.Text

露比

element.text

我发现,当无法在自定义类中获取某些内容或更改 id 时,这种方法绝对是无价之宝:

driver.find_element_by_xpath("//*[contains(text(), 'Show Next Date Available')]").click()
driver.find_element_by_xpath("//*[contains(text(), 'Show Next Date Available')]").text
driver.find_element_by_xpath("//*[contains(text(), 'Available')]").text
driver.find_element_by_xpath("//*[contains(text(), 'Avail')]").text

要打印文本 my text,您可以使用以下 定位策略:

  • 使用 Class _ nameget_attribute("textContent"):

    print(driver.find_element(By.CLASS_NAME, "current-stage").get_attribute("textContent"))
    
  • 使用 Css _ selectorget_attribute("innerHTML"):

    print(driver.find_element(By.CSS_SELECTOR, "span.current-stage").get_attribute("innerHTML"))
    
  • 使用 Xpath短信属性:

    print(driver.find_element(By.XPATH, "//span[@class='current-stage']").text)
    

理想情况下,你需要为 visibility_of_element_located()诱导 等等,你可以使用以下的 定位策略:

  • 使用 类别 _ 名称get_attribute("textContent"):

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CLASS_NAME, "current-stage"))).get_attribute("textContent"))
    
  • 使用 CSS _ SELECTOR短信属性:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.current-stage"))).text)
    
  • 使用 XPATHget_attribute("innerHTML"):

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='current-stage']"))).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
    

您可以在 如何使用 Selenium-Python 检索 WebElement 的文本中找到相关的讨论


参考文献

链接到有用的文档:

对于在 Selenium 4更新后发现此线程的任何人,请注意。 Find _ element _ by _ * 已被弃用,使用它将给出一个“ derecationpolice”。替换方法是: driver.find _ element (By.X,“ name”)请查找 Selenium 4 info。