如何在xpath中选择具有空文本后代的元素?

时间:2017-10-08 20:36:13

标签: java facebook selenium xpath

PAGE - facebook

我想在facebook上打印所有在线朋友(姓名,链接到信使),但我有问题。我不知道。如何获取包含两个属性的元素:

  1. "//li[@class='_42fz']/a"
  2. "class='_568-'" without text (if div of the class="_568-"/没有文字,表示朋友在线)。
  3. 我的代码是:

    List<WebElement> friendElements = driver.findElements(By.xpath("//li[@class='_42fz']/a"));
    

    但我想在线只有朋友的元素。

    代码示例:

    <li id="js_pq" class="_42fz" data-id="101022398278367" aria-controls="js_po" aria-haspopup="true" aria-describedby="js_pp">
    <a class="_55ln _qhr" href="https://web.facebook.com/messages/t/107022338465367" rel="ignore">
    <div class="_55lp">
    <div class="_55lq" aria-hidden="true">
    <div class="_5bon">
    <div class="_568z">
    <div class="_568-">1d</div>
    </div>
    </div>
    <div class="_55lr">Jan Kowalski</div>
    <div class="_55ls"/>
    </div>
    </a>
    </li>
    <li id="js_pq" class="_42fz" data-id="101012398278367" aria-controls="js_po" aria-haspopup="true" aria-describedby="js_pp">
    <a class="_55ln _qhr" href="https://web.facebook.com/messages/t/290222338565367" rel="ignore">
    <div class="_55lp">
    <div class="_55lq" aria-hidden="true">
    <div class="_5bon">
    <div class="_568z">
    <div class="_568-"></div>
    </div>
    </div>
    <div class="_55lr">Kowalski Jan</div>
    <div class="_55ls"/>
    </div>
    </a>
    </li>
    

    在这种情况下,我的程序必须从第二个li获取朋友的名字和href到messenger,因为类_568-的div没有文本,这意味着这个朋友在线。如果此div包含例如<div class="_568-">1d</div>的文本,则表示朋友不在线。

1 个答案:

答案 0 :(得分:0)

您粘贴的html代码段是无效的XML,因此YMMV,但这应该选择您要查找的内容:

Error in .C("IDEAL", PACKAGE = .package.Name, as.integer(n), as.integer(m),  : 
  wrong type for argument 18 in call to IDEAL

或更优雅:

//li[@class='_42fz']//div[@class='_568-'][not(text())]/../../../../../a/@href

DEMO