【问题标题】:Finding classes with spaces in XPath在 XPath 中查找带空格的类
【发布时间】:2017-06-05 19:28:33
【问题描述】:

我之前问过一个关于 XPath 的问题,我试图根据它来解决我遇到的另一个问题,但没有成功。 现在我想获取一些链接的 href 值,稍后我将对其进行迭代。这些链接位于<div class="right-body-2">

其中 div 是一个表,<a>-Element 是来自 <td>-Element 的子元素 <div> 中有多个链接,但我只需要父 <td class="link ac"> 的链接。空间有点棘手,但我找到了解决方案(至少我是这么认为的)。但是还是不行。

ICollection<IWebElement> matchLinks =
phantomDriver.FindElements(By.XPath("//*[contains(@class,'right-body-2')]//td[contains(concat(' ',normalize-space(@class),' '), ' ac ')]/a/@href"));

哪里出错了?

更新:

解决办法

//div[contains(@class,'col-lg-8')]//td[contains(@class, 'link ac')]/a/hrefs

给了我一个空集合。我尝试在 RichTextBox 中写入提取的 href,但该框仍然为空。

foreach (IWebElement match in matchLinks)
{
    rtb_matches.Text += match.Text + Environment.NewLine;

}

【问题讨论】:

    标签: c# html xpath


    【解决方案1】:

    这些是多个类,因为一个类中不能包含空格。所以你的节点实际上有两个类:linkac
    要找到此节点,您只需使用 contains 函数添加几个选择,如下所示:

    "//td[contains(@class, 'link')][contains(@class, 'ac')]"
    

    或简单地将两者结合起来,这更短,但仅在类的顺序不改变时才有效(很少会改变):

    "//td[contains(@class, 'link ac')]"
    

    【讨论】:

    • Mh..that 没有给我一个错误,但是集合中没有任何内容。
    • @I3LaCkPeArL 你确定页面来源是你认为的那样吗?也许根本没有&lt;td class="link ac"&gt;?我已经测试了 xpath,它肯定可以工作。
    • 我自己使用开发者工具浏览了页面源代码。课程肯定在那里。也许我的输出是错误的,因为它是一个属性值而不是文本?
    • @I3LaCkPeArL 尝试输出/打印 PhantomJS 看到的内容,因为与您在浏览器中看到的内容相比,它可能会看到完全不同的页面。
    • 我刚做了,代码就在那里 (
      ) 但是,我刚刚注意到,在 也是一个类名为“link ac”的 td。但是小时候没有链接,可能是这个问题?
    【解决方案2】:

    经过反复试验,我发现以下解决方案对我有用。

    //div[contains(@class,'right-body-2')]//tbody//td[contains(@class, 'link ac')]/a
    

    出于输出目的,我使用了

    foreach (IWebElement match in matchLinks)
    {
        rtb_matches.Text += match.GetAttribute("href") + Environment.NewLine;
    
    }
    

    我希望这将帮助任何有类似问题的人,即使它可能远非漂亮和漂亮:D 感谢 Granitosaurus 帮助我:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多