在python中使用selenium有没有办法在<div>中获取值?

2024-06-02 13:01:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉python和webscraping,所以我不确定元素中的<div>之间的值的名称是什么。很抱歉,无法指定

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

是否有一种方法可以使用selenium和XPath将<div>之间的值分配给python中的字符串变量? 例如,元素中的“值”是一个字符串,它将打印出来:

value

我不熟悉python和selenium,所以我无法理解它


Tags: 方法字符串div名称元素valueseleniumxpath
3条回答

打印出元素的文本

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

xpath:

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

它被称为html innerText

您可以使用selenium中的文本检索此值,或获取_属性

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

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的其他内容

要打印文本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"))
    
  • 使用xpath文本属性:

    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_SELECTOR文本属性:

    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
    

You can find a relevant discussion in How to retrieve the text of a WebElement using Selenium - Python


参考资料

链接到有用的文档:

相关问题 更多 >