硒:获取元素,它只是文本
本文关键字:文本 获取 元素 | 更新日期: 2023-09-27 18:02:20
我试图通过硒找到一个文本,这是直接在HTML中。它看起来像这样:
<br>
Uploaded.net
<img class="bbCodeImage LbImage" />
<br>
我在文本之后找到了图像,但即使是现在,我也无法导航到文本:我找到了img-Element,然后尝试:
var des2 = ele.FindElement(ByProxy.XPath("preceding-sibling::*"));
有趣的是,这已经返回br元素,而不是它正上方的文本。我还试着用蛮力来获取所有元素,文本如下:
var des2 = thread.FindElements(ByProxy.XPath("descendant::*[contains(text(), '"Uploaded.net'")]")).SelectMany(f => f.FindElements(ByProxy.XPath("descendant::*")));
foreach(var ele in des2)
{
Debug.WriteLine(ele.Text);
}
因此,我读取了所有具有上述文本的Descendants并遍历它们,但它们都没有Text集。
我在这里错过了什么重要的东西吗?
Selenium不支持文本节点。然而,你可以用一段JavaScript来获取文本:
string text = (string)((IJavaScriptExecutor)driver).ExecuteScript(
"return arguments[0].previousSibling.textContent.trim();", ele);
我认为没有什么明显的解决办法。可以提供一个非常非常婉转的解决方案。
获取页面的页源——driver.getPageSource();
按img标签分割页面资源。然后用br标记拆分前一个拆分的第一个元素。数组的最后一个元素现在应该是文本。
如果你有这个开发的控制权,有人应该修复页面。