代码之家  ›  专栏  ›  技术社区  ›  Rusty Shackleford

CSS选择器:href的锚文本包含

  •  0
  • Rusty Shackleford  · 技术社区  · 6 年前

    我目前正在考虑选择谷歌工具栏的不同选项。例如,当你搜索某物时,在结果页上,你可以选择在图片、新闻、视频等下搜索相同的词

    我已经做了很长一段时间了,最接近的是下面的选择器:

    div a.q.qs[href]
    

    这将深入到正确的子类,但有16个。尽管进行了数小时的漫无目的的搜索,但我无法使用锚文本周围的contains方法完成查询,这在目标子类中是唯一的。

    我知道Selenium中有一个By LinkText选项,但我不确定锚文本在整个页面中是否是唯一的。另外,我真的很想了解CSS选择器的一般情况,所以即使是这样,我想解决这个特殊的问题,以便我可以将它应用到未来的问题。

    我正在寻找类似以下伪CSS选择器的内容:

    div a.q.qs[href].Anchorcontains("Images")
    

    有人能帮忙吗?

    2 回复  |  直到 5 年前
        1
  •  14
  •   BackSlash    6 年前

    所有链接都有一个名为 tbm :其值为 isch

    a[href*="tbm=isch"]
    
        2
  •  2
  •   JeffC    6 年前

    有时可以通过CSS选择器获得所需的内容,但如果要通过包含的文本查找元素,则必须使用链接文本/部分链接文本(如果是链接)或XPath来查找其他内容。

    您想要的XPath是

    //div[@id='hdtb-msb-vis']//a[.='Images']
    

    你可以用 //a[.='Images'] 但它返回两个元素,其中一个不可见。

    来打破这一切

    // 在任何级别
    div 找一个DIV
    [@id='hdtb-msb-vis']
    //a 他有个孩子 A 在任何级别
    [.='Images'] 包含文本的( . )等于“图像”

    int count = driver.findElements(By.linkText("Images")).size();
    

    和打印计数。我猜是2,其中一个不可见。如果需要的话,您可以使用Selenium将其进一步过滤到仅可见链接。

    反斜杠的CSS选择器答案也会有同样的问题。您可以稍微调整它,并用CSS选择器定位器解决这个问题

    #hdtb-msb-vis a[href*='tbm=isch']
    

    以下是一些CSS参考链接,可以帮助您入门: W3C reference , SauceLabs CSS Selectors tips Taming Advanced CSS Selectors .