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

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

Вопрос:

переделай xpath //div[contains(text(),'Пшеница')]//following::table[1]//tr для элемента <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, который будет искать <td> в строках таблицы, где индекс соответствует индексу заголовка "Базис".

Предположим, что "Базис" находится в первом столбце (индекс 0). В таком случае, XPath будет выглядеть следующим образом:

//div[contains(text(),'Пшеница')]//following::table[1]//tr/td[1]

Если структура таблицы может измениться, и вы хотите сделать XPath более устойчивым, вы можете использовать функцию position() для поиска нужного столбца по заголовку. Вот пример, как это можно сделать:

//div[contains(text(),'Пшеница')]//following::table[1]//tr/td[position() = //div[contains(text(),'Пшеница')]//following::table[1]//th[text()='Базис']/position()]

Этот XPath ищет все <td>, которые находятся в строках таблицы, и выбирает только те, которые соответствуют позиции заголовка "Базис".

Обратите внимание, что данный XPath может быть не самым оптимальным в зависимости от структуры вашего HTML, и его может потребоваться адаптировать под конкретные условия.