如何使用Selenium和Python从标签标签中提取部分文本信息?

问题描述 投票:0回答:1

我试图循环浏览不同的复选框,并检查它们是否存在于列表中,然后点击,如果不存在则继续前进。

我能够提取的html元素如下。

<label>
 <input type ="checkbox" value = "pf29">
 <span> BNN Bloomberg </span>
 <span> class='count'>(16)</span>
<label>

当我做 element.text 时,它给我 BNN Bloomberg (16)。有什么方法可以将文本输出限制为只有BNN Bloomberg?

大约有 33 个不同的标签,所以我无法使用任何字符串方法来限制字符数。

我是html和selenium的新手,所以请原谅我的措辞。

目前我的代码是这样的

element_list = (driver.find_elements_by_css_selector("div[class='modal-dialog-padded-body'] label"))
source = element_list[3].text
print(source)

print(source)给我BNN彭博社(16)

编辑:我必须循环浏览21个不同的元素,并查看文本以查看来源是什么,并相应地检查复选框。

python-3.x selenium xpath css-selectors webdriverwait
1个回答
1
投票

你可以试试下面的css选择器。

element_list =driver.find_elements_by_css_selector("div[class='modal-dialog-padded-body'] label>span:nth-of-type(1)")
source = element_list[3].text
print(source)

element_list =driver.find_elements_by_css_selector("div[class='modal-dialog-padded-body'] label>span:not(.count)")
source = element_list[3].text
print(source)

1
投票

你已经很接近了,要检索文本,就必须要这样做 BNN 彭博社 你需要一步步深入,直到第一个 <span> 标签,您可以使用以下任何一种方法 定位策略:

  • 使用 css_selectorget_attribute():

    print(driver.find_element_by_css_selector("div.modal-dialog-padded-body label span:not(.count)").get_attribute("innerHTML"))
    
  • 使用 xpath文字 属性。

    print(driver.find_element_by_xpath("//div[@class='modal-dialog-padded-body']//label//span[not(contains(@class,'count'))]").text)
    

最佳做法

要打印第一个 标题 你要诱导 WebDriverWait 对于visibility_of_element_located() 您可以使用以下任何一种方式 定位策略:

  • 使用 CSS_SELECTOR文字 属性:。

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.modal-dialog-padded-body label span:not(.count)"))).text)
    
  • 使用 XPATHget_attribute():

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='modal-dialog-padded-body']//label//span[not(contains(@class,'count'))]"))).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
    

参考资料

你可以在下面找到几个相关的讨论。

© www.soinside.com 2019 - 2024. All rights reserved.