C# XPath通过同级HTML元素获取文本

C# XPath通过同级HTML元素获取文本,c#,selenium,xpath,C#,Selenium,Xpath,我无法从有序列表中获取特定字符串。我使用C#和visualstudio在网站上搜索特定字符串,然后导入Excel工作表。具体来说,该值必须是生日。我当前对字符串的请求如下: driver.FindElement(By.XPath("//*[contains(text(), 'Birthdate')]")).Text; <ol> <li> <label>Name</label>Humphrie

我无法从有序列表中获取特定字符串。我使用C#和visualstudio在网站上搜索特定字符串,然后导入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>
我正在搜索的有序列表如下所示:

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>

  • 叫汉弗莱斯,瑞安
  • 出生日期1992年11月14日
  • SSN
  • 我可以搜索“Birthdate”,并使用当前代码将该字符串返回到我的文档中,但是,我想要的是实际的生日,而不是标签。

    问题是,您无法直接使用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工作表中的区域仍然为空。我只是有点不解为什么。有什么建议吗?非常感谢。很抱歉格式化,我对该网站不熟悉。@rinktalular谢谢,你能在控制台上打印出
    driver.FindElement(By.XPath(“//li[label='Birthdate]”)的结果吗?.Text.Replace(“Birthdate”)
    ,看看值是什么吗?@alecxe我用messagebox()创建了一个新变量,字符串DOB当我告诉它显示DOB时,输出一个空白窗口,因此,我假设它是空白和/或null
    DOB=activesheet.Range[“B”+n]。Value=driver.FindElement(By.XPath(“//li[label='Birthdate']”)。Text.Replace(“Birthdate”,”)旁注:更改HTML可能是更好的解决方案,因为除了简化搜索之外,它还可以简化文本的样式:
  • 1992年11月14日出生日期
  • @rinktagular good,尽管我认为我们的思路是正确的。您得到的空字符串可能有多种原因。如果目标网站是公开的,你能给我它的链接吗?谢谢