Комбинированное селектирование элементов MATCH и CSS



  • Требуется выбрать элемент на странице которая все время меняет структуру (в некоторых пределах). Поэтому зацепиться предлагаемыми BASом CSS не получается. Классами и id воспользоваться тоже невозможно - они носят неспецифичный характер. Однако есть некий текстовый "якорь", который можно отловить МATCH. Он достаточно устойчив при загрузке разных страниц. Но нужен не он, а следующие за ним элементы разметки. Они тоже всегда расположены за этим якорем (они следуют за элементом разметки якоря, но не являются его потомком). Казалось бы можно воспользоваться конструкцией >MATCH>Текст якоря>CSS>. Но почему то она не срабатывает. MATCH цепляет, но дальше CSS не продолжает. Пробовал разные варианты CSS.
    Ставил тег, следующий за тегом Текста якоря

    MATCH>Текст якоря>CSS> td
    Пробовал добавить модификатор CSS "следующий элемент"
    MATCH>Текст якоря>CSS> +td
    Использовал класс, неспецифичный, но в связке с якорем образующий уникальную
    комбинацию, типа
    MATCH>Текст якоря>CSS> .class
    Не работает.
    Вообще эта заявленная конструкция MATCH -CSS работает?
    Вот для примера такого типа страница. http://zakupki.gov.ru/epz/order/notice/printForm/view.html?regNumber=0167200003417004128
    Допустим, нужно вытащить значение таблицы "оказание авиационных услуг вертолетом" (Подчеркиваю, шапка таблицы может изменяться, само её расположение на странице тоже, но эта таблица всегда идет после надписи "Объект закупки").
    Представляется, что такого типа задача встречается достаточно часто.



  • @VsDimin and what is the question?



  • Рекомендации мануала не помогают. Там очень скудно описан вариант совместного использования MATCH + CSS



  • Можно попробовать с помощью xpath >XPATH> //td[text() = "оказание авиационных услуг вертолетом"]/following::td[1] - получите колонку "Код по ОКПД2"



  • @qwaros насколько я понял, "оказание авиацио..." может поменяться и привязаться можно только к "Объект закупки".



  • @uraabk именно.
    В общем виде задача стоит так: после некоторого якорного текста идет произвольная заранее не известная таблица, все ячейки которой нужно распарсить в отдельные переменные или скажем в объект типа список BAS (последнее трудностей не представляет. проблема именнов в селекторе). Интересно, возможно ли похимичить с селектированием через комбинацию MATCH, CSS, XPATH.



  • @vsdimin дальше думаю сами добьете.

    >XPATH> //*[text()="Объект закупки"]/following::table
    

    0_1551204857739_2019-02-26_211354.png



  • @vsdimin said in Комбинированное селектирование элементов MATCH и CSS:
    Только что сам доэкспериментировался, но идея, в целом, как у @uraabk

    XPATH> //b[text() = "Объект закупки"]/following::tr[1] >CSS> td>AT>9
    Менее лаконично, но сработало.
    Спасибо спецам от новичка.

    Остался, правда, теоретический аспект.
    Пришло понимание, что инструмент MATCH принципиально отличается от CSS, XPATH. Последние всегда возвращают логически законченную (корректную) часть кода (если не находят эту семантически корректную часть - сразу видно). А MATCH режет код поперек. То есть ему главное найти заданный текстовый патерн, даже если он содержит какой то "хвост" одного или нескольких элементов и "голову" другого или других - по сути, синтаксически бессмысленную конструкцию.
    BAS, когда MATCH находит патерн, вроде бы подсвечивает весь элемент. Но прицепиться к нему (этому чему-то подсвеченному) потом с помощью, например CSS , не удается. CSS вроде бы не понимает, что ему подсунул MATCH/
    Остается непонятка - что, собственно говоря, MATCH возвращает? Позицию последнего символа в коде (заданного поисковой фразой)?
    Или тот элемент кода внутри которого оказалась эта позиция? Тогда как он определяет какого? Если, например, конец поисковой фразы оканчивается внутри атрибута или класса, то что выдаст MATCH - этот атрибут класса, или тег, внутри которого они оказались? А если поисковый патерн "задевает" несколько тегов, то что вернет MATCH.
    В первом варианте (выдает позицию символа), не очень понятно как сопрячь MATCH с CSS/XPATH. Во втором (связывает найденную позицию к элементом кода) - их согласованность совместного действия выглядит более обоснованной (но на практике, что то не срабатывает).



  • @uraabk по той же логике можно привязаться к первой строке оглавления таблицы :)


Log in to reply