Python 如何检查web元素中匹配的文本是否部分包含在<;a>;标签?

Python 如何检查web元素中匹配的文本是否部分包含在<;a>;标签?,python,python-3.x,selenium,xpath,web-scraping,Python,Python 3.x,Selenium,Xpath,Web Scraping,我有以下资料: This is my text string and this next <a href='https//somelink.org/'>part</a> is only partially enclosed in a tags. 但它没有找到任何东西,可能是因为我在那里有空间——我如何克服这个问题 提前感谢您,您需要为此使用嵌套的XPath选择器 //*[contains(text(), 'next') and a[contains(text(), 'p

我有以下资料:

This is my text string and this next <a href='https//somelink.org/'>part</a> is only partially enclosed in a tags.
但它没有找到任何东西,可能是因为我在那里有空间——我如何克服这个问题


提前感谢您,

您需要为此使用嵌套的XPath选择器

//*[contains(text(), 'next') and a[contains(text(), 'part')]]
这将查询包含文本的任何元素
next
,然后还将检查该元素是否包含嵌套的
a
元素以及文本
部分

要确定是否确实存在嵌套的
a
标记,您需要为此编写一个方法来检查两个不同的XPath。除了评估元素并查看其中的内容之外,没有简单的方法可以解决这个问题

public bool DoesElementHaveNestedTag()
{
    // check for presence of locator with nested tag
    // if driver.findElements returns > 0, then nested tag locator exists
    if (driver.findElements(By.XPath("//*[contains(text(), 'next') and a[contains(text(), 'part')]]")).Count > 0) return true
    else return false
}

您可以更改此方法以满足您的需要,但想法是相同的。无法知道WebElement是否有嵌套标记,除非您尝试使用两个XPath查找WebElement——一个用于检查标记,另一个不检查标记。

让我们假设以下html:

<p>This is my text string and this next <a href='https//somelink.org/'>part</a> is only partially enclosed in a tags.</p>
我们可以确定它是否部分与regex(尽管是小马托尼)在a标签中:

html=p.get\u属性('innerHTML')
partial_in_a='next part'在re.sub中(r'','',html)和'next part'不在html中

对于这一点,没有纯xpath 1.0解决方案,而且通常依赖xpath来实现这类内容是错误的。

尝试像这样分解文本匹配//*[contains(text(),“next”)和contains(text(),“part”)]如果“part”周围有标签,您能澄清一下您的预期输出是什么吗?JackFleeting我想得到True/False,web元素本身也会随之返回。因此,为了确认:如果没有
?要匹配该用法:
/*[contains(,“next part”)]
-但如果您允许,它将与第一件事(html)匹配,因此可能会缩小*部分的范围。就是这样,工作完美,谢谢您。切中要害,非常感谢!出于好奇,有没有办法用xpath 2.0解决这个问题?用xpath 2可能是可行的,但我看不出有什么意义。Xpath主要是我们过去使用xml来处理现在使用json处理的事情的一个古老遗迹。感谢您的回答,我感谢您的帮助。虽然xpath对我不起作用(不知道为什么)
<p>This is my text string and this next <a href='https//somelink.org/'>part</a> is only partially enclosed in a tags.</p>
p = driver.find_element_by_xpath('//p[contains(.,"next part")]')
html = p.get_attribute('innerHTML')
partly_in_a = 'next part' in re.sub(r'</?a.*?>', '', html) and 'next part' not in html