переделай xpath //div[contains(text(),'Пшеница')]//following::table[1]//tbody/tr/td для элемента <table class="table"> <thead> <tr> <th style="white-space: nowrap;">Базис</th> <th style="white-space: nowrap;">Номенклатура</th> <th style="white-space: nowrap;">Цена без НДС</th> <th style="white-space: nowrap;">С НДС</th> </tr> </thead> чтобы брались только те td, которые соответствуют th "Базис", при том, что структура таблицы может измениться
Чтобы выбрать только те <td>
, которые соответствуют заголовку <th>
"Базис", можно использовать XPath с учетом структуры таблицы. В данном случае, мы можем использовать preceding-sibling
для нахождения нужного <th>
и затем выбрать соответствующий <td>
.
Вот пример XPath, который будет выбирать только те <td>
, которые соответствуют заголовку "Базис":
//div[contains(text(),'Пшеница')]//following::table[1]//thead/tr/th[text()='Базис']/parent::tr/following-sibling::tr/td[position()=1]
Однако, если структура таблицы может измениться, и вы хотите быть уверенными, что выбираете именно тот <td>
, который соответствует заголовку "Базис", можно использовать более универсальный подход:
//div[contains(text(),'Пшеница')]//following::table[1]//tr[th[text()='Базис']]/following-sibling::tr/td[1]
Этот XPath ищет строку, где заголовок "Базис" находится в <th>
, а затем выбирает все последующие строки и берет первый <td>
из каждой из них, который соответствует заголовку "Базис".
Если вам нужно выбрать все <td>
, соответствующие "Базис", вы можете использовать:
//div[contains(text(),'Пшеница')]//following::table[1]//tr[th[text()='Базис']]/following-sibling::tr/td[position()=1]
Этот XPath будет работать даже если структура таблицы изменится, при условии, что заголовки останутся на своих местах.