使用XPath通过兄弟HTML元素获取文本

3

我在从有序列表中获取特定字符串时遇到了困难。我正在使用C#和Visual Studio搜索一个网站以寻找一个特定的字符串,然后将其导入到Excel表格中。具体来说,这个值需要是一个出生日期。我的当前字符串请求如下:

driver.FindElement(By.XPath("//*[contains(text(), 'Birthdate')]")).Text;

我正在搜索的有序列表如下:
<ol>                  
  <li>
        <label>Name</label>Humphries, Ryan</li>
    <li>
        <label>Birthdate</label>11/14/1992</li>
    <li>
        <label>SSN</label>

我可以搜索“出生日期”,并使用我的当前代码将该字符串返回到我的文档中,但是,我想要实际的出生日期,而不是标签。

1个回答

3

问题在于,你不能直接使用selenium找到/引用文本节点。解决这个问题的常见方法是获取父元素的文本,并从中“减去”子元素的文本。

换句话说,找到li元素,获取文本并用空字符串替换Birthdate

driver.FindElement(By.XPath("//li[label = 'Birthdate']")).Text.Replace("Birthdate", "")

非常感谢您的快速回复!具体来说,我的代码如下:`activesheet.Range["B" + n].Value = driver.FindElement(By.XPath("//li[label = 'Birthdate]")).Text.Replace("Birthdate", "");` 您的解决方案确实对我有所帮助,但是我的Excel表格区域仍然为空白。我有点困惑为什么会这样。您有什么建议吗?谢谢!对于格式问题,我在这个网站上还很新手,请见谅。 - Rinktacular
@Rinktacular 谢谢你,你能在控制台上打印出driver.FindElement(By.XPath("//li[label = 'Birthdate]")).Text.Replace("Birthdate", "")的结果并查看其值吗? - alecxe
2
附注:更改HTML可能是更好的解决方案,因为它不仅可以更轻松地样式化文本,还可以简化搜索:<li><label>出生日期</label><span class="date">11/14/1992</span></li>。 - Alexei Levenkov
@Rinktacular 不错,虽然我认为我们正在正确的轨道上。导致你得到空字符串的原因可能有多种。如果目标网站是公开的,你能给我链接吗?谢谢。 - alecxe
@alecxe 另外,我认为该字段留空是因为我们要将“birthdate”替换为“”,这将使该字段为空。再次感谢您迄今为止给予我的所有帮助! - Rinktacular
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接