我试图循环浏览不同的复选框,并检查它们是否存在于列表中,然后点击,如果不存在则继续前进。
我能够提取的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个不同的元素,并查看文本以查看来源是什么,并相应地检查复选框。
你可以试试下面的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)
你已经很接近了,要检索文本,就必须要这样做 BNN 彭博社 你需要一步步深入,直到第一个 <span>
标签,您可以使用以下任何一种方法 定位策略:
使用 css_selector
和 get_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)
使用 XPATH
和 get_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
你可以在下面找到几个相关的讨论。