【问题标题】:How to get text with Selenium WebDriver in Python如何在 Python 中使用 Selenium WebDriver 获取文本
【发布时间】:2014-01-26 14:20:07
【问题描述】:

我正在尝试使用 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>

我该如何解决这个问题?

【问题讨论】:

  • 如果以交互方式完成,结果可能类似于错误消息 "AttributeError: 'current-stage' object has no attribute 'getText'"

标签: python selenium


【解决方案1】:

你只想要.text

然后您可以在获得它之后验证它,不要尝试传递您期望它应该有的东西。

【讨论】:

  • 我收到此错误 - 'WebDriver' 对象没有属性 'getText'
  • @user3121891,它是.text
  • @user3121891 driver.find_element_by_class_name("current-stage").text ....只需 text 就可以了。 没有别的。
  • 您将要遍历 selenium 对象列表并在 for 循环的每个项目上应用 .text
  • 是的@Arran,当我检查元素时,它显示了完整的文本,但是当我尝试抓取它时,我只能检索到网站上实际显示的缩写版本(该网站这样做是因为某些文本对于预期的样式可能太长)
【解决方案2】:

Python

element.text

Java

element.getText()

C#

element.Text

红宝石

element.text

【讨论】:

  • 我找不到任何关于 Python 的文档,你们在哪里找到的?
  • @CharlesSmith 如果你在 VSCode 中的元素后面加上 .,你会得到一个基于类接受的建议列表。我就是这样发现的。
  • 是的,我在 IntelliJ 中注意到了同样的情况,只是想知道为什么它不在文档中
  • @Charles Smith:它位于 Web element 的子部分 “获取元素文本”(在页面底部)。有六种不同的语言,默认为 JavaScript。点击“Python”查看Python代码示例。
【解决方案3】:

答案是:

driver.find_element_by_class_name("ctsymbol").text

【讨论】:

    【解决方案4】:

    要打印文本my text,您可以使用以下任一Locator Strategies

    • 使用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"))
      
    • 使用xpathtext 属性:

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

    理想情况下,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

    • 使用CLASS_NAMEget_attribute("textContent")

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

      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
      

    您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论


    参考文献

    链接到有用的文档:

    【讨论】:

      【解决方案5】:

      你可以使用:

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

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

      【讨论】:

        【解决方案6】:

        这是正确的答案。成功了!!

        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)
        

        【讨论】:

          【解决方案7】:

          当无法在自定义类中获取某些内容或更改 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
          

          【讨论】:

          • 你能解释一下为什么它绝对是无价的吗?
          • 为什么需要.click()?为什么.text会有三行?
          • 问题说“请注意我不想使用XPath”.
          猜你喜欢
          • 1970-01-01
          • 2016-06-13
          • 1970-01-01
          • 2020-01-11
          • 2018-03-03
          • 2021-09-02
          • 1970-01-01
          • 1970-01-01
          • 2015-04-05
          相关资源
          最近更新 更多