如何在强标记和普通文本中刮取文本

2024-04-18 12:32:54 发布

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

我有一个li标签列表,在每个li标签中都有一些带有强标签和普通文本的文本 //*[@id=“main”]/li[1]/strong的Xpath 如何获取普通文本,如果我获取li标记的xpath,那么它将刮取整个文本,有没有方法获取单独的文本

<li>
<strong>Heading</strong>
: Sample paragraph to get the text from here.
</li>

Tags: tosample方法标记文本id列表main
3条回答

如果您使用的是JavaScript执行器并获取节点的lastChild。你知道吗

print(driver.execute_script('return arguments[0].lastChild.textContent;', driver.find_element_by_xpath('//*[@id="main"]/li[1]')))

您可以获取<li>文本并从中删除<strong>文本

element = driver.find_element_by_xpath('//*[@id="main"]/li[1]')
all_text = element.text
element = element.find_element_by_xpath('./strong')
text = all_text.replace(element.text, '')

要刮取正常文本,需要为visibility_of_element_located()导入WebDriverWait,并且由于所需节点是text节点,因此可以使用execute_script()方法和以下Locator Strategy

  • xpath 1:

    print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//li[./strong[text()='Heading']]")))))
    
  • xpath 2:

    print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//li/strong[text()='Heading']/..")))))
    

相关问题 更多 >