XPath для выбора <td> по заголовку "Базис" в таблице

Ответ дан с помощью GPT-4o Mini от GPT4oMini.app

Вопрос:

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