我想在网站上获取一个每天更改名称的链接。结构类似于此(但有更多级别):
<li>
<div class = "contentPlaceHolder1">
<div class="content">
<p>
<strong>'Today's File Here:<strong>
</p>
</div>
</div>
</li>
<li>...<li>
<li>...<li>
<li>...<li>
<li>
<div class = "contentPlaceHolder1">
<div class="content">
<div class="DocLink">
<li>
<a href = "http://changingURL" class="txtLnk">Download</a>
</li>
</div>
</div>
</div>
</li>
<li>...<li>
etc...
如果我使用
找到页面正上方的文本(将保持不变)IWebElement foundTextElement = chrome.FindElement(By.XPath("//p/strong['Today's File Here:']"));
如何使用XPath(或替代解决方案)找到页面中的下一个链接?我不确定如何在此之后搜索下一个元素。
如果我使用
IWebElement link = chrome.FindElement(By.XPath("//a[@class='txtLnk'"));
然后找到页面中的第一个链接。我只想在'foundTextElement'
之后首次出现它我已经通过将树导航到<li>
上方的父级,并使用By.XPath("following-sibling::*[4]/div/div/div/li/a[@class='txtLnk']")
找到第4个兄弟,但这对我来说似乎有些不稳定。
我可以解析HTML直到它在html中找到下一个匹配项,但是想知道是否有更聪明的方法可以做到这一点?
感谢。
答案 0 :(得分:2)
您可以尝试使用此xpath。它很复杂,因为我们没有看到页面的其余部分来优化它
//li[preceding-sibling::li[.//*[contains(text(),'File Here')]]][.//a[contains(@class,'txtLnk')]][1]
首先搜索li
内部带有a
类的txtLnk
标记li
,然后首先在File Here
元素后面找到包含{{1}}的文字{ p>
答案 1 :(得分:0)
IWebElement aElement = chrome.FindElement(By.CssSelector("div.contentPlaceHolder1 div.content div.DocLink li a"));
是一个非常通用的选择器,页面上可能有其他元素使用相同的类
你可以使用CssSelector找到它,试试这个:
string link = aElement.getAttribute("href") ;
然后你可以使用:
获得href{{1}}