如何使用“not(contains())”谓词为span标记编写Xpath

问题描述 投票:0回答:1

我想阅读那些有价格和同样想要得到没有价格的产品数量的产品。我在下面写了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>
selenium selenium-webdriver xpath
1个回答
0
投票

你在开始时有一个错误的类名,你的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个span标签,因为你有价格的跨度,它将是空的或者在那里有价格,然后是class = priceTag-discount的下面的跨度在里面。因此,在包含两个html片段的页面上,它会找到3个元素,而不是1.因此,您需要删除其中一个span标记(可能在span标记中设置了包含价格的类)或者如果不可能,您需要使用以下xpath

//div[@class='m-product-mini-image']//a[@class='m-product-mini-price ']//span[not(contains(text(),'$')) and not(contains(@class,'priceTag-discount'))]
© www.soinside.com 2019 - 2024. All rights reserved.