Мне нужно собрать цены со страницы на нескольких табах и проверить, что они отсортированы по возрастанию. При этом для одного из табов после обычного списка цен идет сразу же цены для альтернативных дат, которые отсортированы отдельно. В тегах связанных с ценами, я отличий с обычными ценами не нашел, но они начинаются после разделителя Alternative Dates.
Я попытался сделать
Я собираю все цены с помощью xpath по ценам - это отлично работает, но включает также и цены для альтернативных дат. что ломает мою проверку сортировки.
XPath для цен: //span[@data-test='price']//span[@data-test='JourneyDetailsPriceMain']
XPath для всех элементов, включая цены под разделителем Alternative Dates: //div[@class='Results__alternativeResultsDivider___CLC0m']//following::*
Я решил, что можно комбинировать xpath чтобы показывать все цены, которые не находятся под альтернативными данными
//span[@data-test='price']//span[@data-test='JourneyDetailsPriceMain'] and not(//div[@class='Results__alternativeResultsDivider___CLC0m']//following::*) ```
У меня не получилось ... комбинировать два xpath, гугл и стейковерфлоу не нашел можно ли так делать. Возможно так делать нельзя.
Хотел узнать у сообщества можно ли комбинировать два xpath в одном и если да - то что делаю не так?
как вариант решения задачи: можно собирать два массива цен - все цены и цены которые находятся под Альтернативными датами (xpath //div[@class=‘Results__alternativeResultsDivider___CLC0m’]//following::span[@data-test=‘price’]//span[@data-test=‘JourneyDetailsPriceMain’] ), потом вычислять размер массива цен с альтернативными датами = n и удалять из массива всех цен последние n элементов. Таким образом получать на выходе только цены для выбранной даты без альтернативных дат. Но если есть возможность сразу собирать только цены, не включающие альтернативные даты - я бы предпочел так
чтобы вытащить все цены -xpath //price
чтобы вытащить только цены для альтернативных дат xpath: //alternative_dates//following::price
чтобы вытащить только цены, которые до альтернативных дат - комбинация //price and not(//alternative_dates//following::price) - не работает
можно вытащить с помощью //alternative_dates//preceding::price - получится ли так на моей странице с ценами, которая несколько сложнее этого xml и где альтернативные даты могут присутствовать, а могут и не присутствовать - тогда запрос на preceding ничего не найдет - будем посмотреть, но принципиальный вопрос - можно ли комбинировать два разных xpath и логические операнды в одном запросе, мне все же интересен.
пока единственное отличие которое я на шел - наличие надписи об альтернативных датах и этот class вроде применяется только для надписи, но не для цен под ним - то есть они именно following а не child
Спасибо за ответы. В итоге. я все же остановился на варианте, что я собираю все цены, потом собираю цены только для альтернативных дат и потом отнимаю их от конца массивов всех цен. Такой подход кажется мне более удачным, так как альтернативные цены могут быть, а могут и не быть - тогда запрос, который включает хpath к ним будет выдавать эксепшн. Значит надо сначала проверять наличие альтернативных дат, а потом уже или запрашивать или не запрашивать цены для этих дат. А обычные цены есть всегда.