C# XPath通过同级HTML元素获取文本
我无法从有序列表中获取特定字符串。我使用C#和visualstudio在网站上搜索特定字符串,然后导入Excel工作表。具体来说,该值必须是生日。我当前对字符串的请求如下: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
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时,输出一个空白窗口,因此,我假设它是空白和/或nullDOB=activesheet.Range[“B”+n]。Value=driver.FindElement(By.XPath(“//li[label='Birthdate']”)。Text.Replace(“Birthdate”,”)代码>旁注:更改HTML可能是更好的解决方案,因为除了简化搜索之外,它还可以简化文本的样式:1992年11月14日出生日期
@rinktagular good,尽管我认为我们的思路是正确的。您得到的空字符串可能有多种原因。如果目标网站是公开的,你能给我它的链接吗?谢谢