Как написать Xpath с использованием предиката not (contains ()) для тега span - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу прочитать продукты, у которых есть цена, и таким же образом хочу получить количество продуктов, у которых нет цены. Я написал ниже 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>

1 Ответ

0 голосов
/ 11 сентября 2018

В начале у вас неправильное имя класса, у вашего 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 тега диапазона для каждой записи, так как у вас есть диапазон для цены, который будет либо пустым, либо будет указана цена, а затем следующий диапазон с классом.= priceTag-скидка в нем.Таким образом, на странице с обоими 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'))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...