【问题标题】:Is there a way to get the value within a <div> using selenium in python?有没有办法在 python 中使用 selenium 获取 <div> 中的值?
【发布时间】:2020-12-08 01:49:19
【问题描述】:

我是 python 和 webscraping 的新手,所以我不确定元素中 &lt;div&gt; 之间的值的名称是什么。很抱歉无法指定。

<div class="syllable">value</div>

有没有办法使用 XPath 使用 selenium 将 &lt;div&gt; 之间的值分配给 python 中的字符串变量? 例如,元素中的“值”是一个字符串,它会打印出来:

value

我是 python 和 selenium 的新手,所以我不明白。

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    叫做html innerText

    您可以使用 selenium 中的文本或 get_attribute 检索此值。

    这将返回呈现的文本(表示显示的文本)

    elem=driver.find_element_by_class_name("syllable")
    print(elem.text)
    

    这会返回文本而不检查样式属性,即使它没有显示在 UI 中也会返回值

    elem=driver.find_element_by_class_name("syllable")
    print(elem.get_attribute("textContent")
    

    您也可以使用此文本找到 elem:

    // partial match
    elem=driver.find_element_by_xpath("//div[contains(text(),'value')])
    print(elem.text)
    
    // exact match 
    elem=driver.find_element_by_xpath("//div[text()='value')])
    print(elem.text)
    
    // exact match of the elements text if there is any child element like span it won't return the element
    elem=driver.find_element_by_xpath("//div[.='value')])
    print(elem.text)
    

    另请注意:

    您可以阅读的有关 outerHTML 和 innerHTML 的其他内容

    【讨论】:

      【解决方案2】:

      打印出元素的文本。

      elem=driver.find_element_by_class_name("syllable")
      print(elem.text)
      

      xpath:

      elem=driver.find_element_by_xpath("//div[@class='syllable']/text()")
      print(elem)
      

      【讨论】:

        【解决方案3】:

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

        • 使用class_nameget_attribute("textContent")

          print(driver.find_element_by_class_name("syllable").get_attribute("textContent"))
          
        • 使用css_selectorget_attribute("innerHTML")

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

          print(driver.find_element_by_xpath("//div[@class='syllable']").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, "syllable"))).get_attribute("textContent"))
          
        • 使用CSS_SELECTORtext属性:

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

          print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='syllable']"))).get_attribute("innerHTML"))
          
        • 控制台输出:

          value
          
        • 注意:您必须添加以下导入:

          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找到相关讨论


        参考文献

        链接到有用的文档:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-26
          • 1970-01-01
          • 2022-08-10
          • 2016-08-22
          • 1970-01-01
          • 1970-01-01
          • 2017-06-10
          相关资源
          最近更新 更多