硒:获取元素,它只是文本

本文关键字:文本 获取 元素 | 更新日期: 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标记拆分前一个拆分的第一个元素。数组的最后一个元素现在应该是文本。

如果你有这个开发的控制权,有人应该修复页面。