【问题标题】:How to write a Xpath using "not(contains())" predicate for span tag如何为 span 标签使用“not(contains())”谓词编写 Xpath
【发布时间】:2018-09-11 19:08:31
【问题描述】:

我想阅读有价格的产品,同样的方式想得到没有价格的产品的数量。我在 XPath 下写过,但它不起作用

//div[@class='m-product-mini']//a[@class='m-product-mini-price ']//span[not(contains(text(),'$'))] 

没有价格的元素的HTML:

<div class="m-product-mini-image">
<a href="#" class="btn btn-light btn-quickview no-mobile" style="opacity: 0;">Quick view</a> <a class="m-product-mini-price "><span></span> <span class="priceTag-discount"></span></a>
</div>

带有价格的元素的 HTML:

<div class="m-product-mini-image">
<a href="#" class="btn btn-light btn-quickview no-mobile">Quick view</a> <a class="m-product-mini-price "><span>$34.95</span> <span class="priceTag-discount"></span></a>
</div>

【问题讨论】:

  • 快速浏览 这是html有价格的产品代码
  • 快速查看 $34.95 这是具有价格
  • 试试//a[normalize-space(@class)='m-product-mini-price']/span[not(text())]
  • 嗨,Andersson 试过了,但没有工作 XPath 结果适用于所有产品,但不适用于没有价格的产品

标签: selenium selenium-webdriver xpath


【解决方案1】:

一开始你的类名错误,你的 div 有 m-product-mini-image 类,但你的 xpath 只是在寻找 m-product-mini,xpath:

//div[@class='m-product-mini-image']//a[@class='m-product-mini-price ']//span[not(contains(text(),'$'))]

工作正常,但是问题在于它为每个条目找到 2 个跨度标签,因为您的价格跨度将为空或其中包含价格,然后是 class= 的以下跨度priceTag-折扣在里面。因此,在包含两个 html sn-ps 的页面上,它会找到 3 个元素,而不是 1 个。因此,您要么需要删除一个跨度标签(也许在跨度标签中设置了包含价格的类) 或者如果不可能的话,你需要使用以下 xpath

//div[@class='m-product-mini-image']//a[@class='m-product-mini-price ']//span[not(contains(text(),'$')) and not(contains(@class,'priceTag-discount'))]

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签