Визуальный конструктор блоков для реализации логики



  • Столкнулся с такой ситуацией: на входе есть данные для реализации логики - они связаны с элементом на странице - элемент не имеет четкой структуры и периодически меняется - пытался воплотить следующий алгоритм:
    получить текст на странице - проверить его по входным данным - дать ответ по совпадению НО - получить текст не всегда получается - есть три элемента css - и они различные - отследить связи по которым они изменяются не удается - решил переиначить - поставил блок игнорировать ошибки - и в нем получить текст - пооочередно на все три элемента - в разные переменные - затем присвоить переменную и указал три перменных - но выдает ошибку - так как одно из действий получения текста выполняется с ошибкой - соответственно перемная не содержит ничего - и здесь облом. Построить цепочку действий в таком случае не получается -
    вот если бы можно было как то наглядно прокладывать пути меджу блоками действий для связки - было бы супер - а так получается что несколько днефй работы пришли к своему логическому заключению из - за специфики BAS...
    @support - если бы Вы сделали на каждом действии да и нет - для прокладки путей - это бы многим облегчило жизнь и дало бы возможность делать более сложные скрипты...
    Ведь это же возможно - как блок схемы, которые мы рисовали на уроках программирования....



  • сделай проверку на существование, и если елемент существует уже получай текст и ложи его в переменную.

    Проверить существование css1
    IF IS_EXIST
        Получить текст в переменную [[TEXT]]
    Проверить существование css2
    IF IS_EXIST
        Получить текст в переменную [[TEXT]]
    Проверить существование css3
    IF IS_EXIST
        Получить текст в переменную [[TEXT]]
    

    Как то так. В итоге не будет лишних переменных, и проблем с ними



  • @DrPrime спасибо - всегда оперативно выручаешь - я вначале использовал этот метод - пока не уперся головой в стену - предложенный вариант это идеальное решение, но в моем случае 2 из 3 css блоков всегда существуют, только принадлежат к разным блокам (на одной странице нужный текст находится в css1 на другой этот же текст в css2, а порой и в css3 но 2 из 3 блоков всегда присутствуют только правильный из них всего один...) - что посоветуете в этом случае???



  • @Turutur ну тут уже по странице нужно смотреть
    сразу и не скажешь. Есть какие то особености текста?


  • administrators

    @Turutur Вам нужно более точнее определиться с алгоритмом работы. Не понятно какой блок вам нужен.

    но 2 из 3 блоков всегда присутствуют только правильный из них всего один

    Если существуют 2 блока и один из них всегда правильный, как выбрать какой именно?



  • @support @DrPrime ребята - все так и есть как написал - попробую по другому описать проблему:
    тз - нужно спарсить со страницы анкор ссылки, который является подкатегорией и исходя из анкора сделать следующее действие - это все просто, НО

    подкатегории лежат в разных категориях и блоки обрамления имеют разный вид, например на одной странице :nth-child(12) > ul > :nth-child(3) > a

    и этот же анкор в другой категории :nth-child(4) > ul > :nth-child(1) > a

    я конечно пробовал найти общие элементы для всех страниц - но общих блоков не нашел - есть такие например
    project_234234234_хххххххх - где номер проекта разный в каждой странице!!!

    так жже пробовал через получить код элемента и через match - все меняется - я первый раз с такими сложностями сталкиваюсь - для большей наглядности:

    страница https://www.fl.ru/projects/3069383/sdelat-ochen-prostoy-logotip.html
    0_1481938619793_121212.png

    страница https://www.fl.ru/projects/3069216/natyanut-vrstku-na-bitriks.html
    0_1481938644470_131313.png

    и страница https://www.fl.ru/projects/3068197/dorabotka-internet-magazina-na-wordpress.html
    0_1481938685240_141414.png

    я пробовал получать эти элементы с 9ти подкатегорий - сегодня они срабатывают - завтра нет - так как элементы на некоторых страницах отличаются - закономерностей не нашел.

    Поэтому я и делал "игнорировать ошибки" > "полусить текст 1" > "получить текст 2" > "получить текст 3"

    и

    и блоком игнор ошибок
    присвоить переменную [[text1]][[text2]][[text3]] - на выходе получаю ошибку - так как текст 2 или 3 получить не удается, а текст 1 либо принадлежит анкору либо другому тексту на странице((((


  • administrators

    @Turutur
    Получить подкатегорию(то что выделено красным на скринах) у меня получилось используя второй вариант предложенный БАС:

    :nth-child(2) > :nth-child(1) > :nth-child(4) > :nth-child(2)
    

    Проект parseflsub.xml

    И даже если структура страницы была бы всегда разная, всегда можно получить код страницы и регуляркой искать вот этот кусок

    <a href="/freelancers/razrabotka-sajtov/">Разработка сайтов</a> / <a href="/freelancers/web-programmist-razrabotka-sajtov/">Веб-программирование</a>
    

    Или еще. На всех 3 страницах есть всего 2 ссылки, вида /freelancers/что-то там и вторая как раз та, что вам нужна. Их легко найти через регулярку/xpath



  • @support said in Визуальный конструктор блоков для реализации логики:

    Получить подкатегорию(то что выделено красным на скринах) у меня получилось используя второй вариант предложенный БАС:
    :nth-child(2) > :nth-child(1) > :nth-child(4) > :nth-child(2)

    @support - получить у меня то же получилось - но потом они поменялись(, буду пробовать xpath - спасибо!



  • вот шаблон xpath который вернет анкор подкатегории //div[contains(@class, "b-layout__txt_fontsize_11")]/a[last()]/text()



  • @support said in Визуальный конструктор блоков для реализации логики:

    Или еще. На всех 3 страницах есть всего 2 ссылки, вида /freelancers/что-то там и вторая как раз та, что вам нужна. Их легко найти через регулярку/xpath

    подскажите какой либо конструктор выражения - а то гугл не знает ничего приличного кроме теории - я получил путь //*[@id="project_info_3069383"]/div[1]/div[4]/a[2] - но он мне тоже не подходит(


  • administrators

    @Turutur лучший конструктор - внутри браузера http://prnt.sc/dkg4m0



  • @support - все печально( - //*[@id="project_info_3069383"]/div[1]/div[4]/a[2] - я так и получал (((



  • @koward said in Визуальный конструктор блоков для реализации логики:

    //div[contains(@class, "b-layout__txt_fontsize_11")]/a[last()]/text()

    спасибо за готовое решение - пока работает - подскажите как составляли - владеете материалом или софт есть какой?



  • @Turutur составлять xpath выражения можно научится за вечер ничего сложного в нем нет, вот вам 2 ссылок для ознакомления http://zvon.org/xxl/XPathTutorial/Output_rus/examples.html
    http://onedev.net/post/458



  • @koward спасибо - то что надо!



  • @support - я в недоумении - @koward уже дал готовое решение - но я не могу применить его на практике! выполняю следующие действия - Браузер(код страницы) - Xpath(получить текст) - текст для применения xpath код страницы - xpath запрос - //div[contains(@class, "b-layout__txt_fontsize_11")]/a[last()]/text() - в итоге переменная xpath_text - содержит "" ??? Что не так???


  • administrators

    @Turutur Я тоже в шоке, у меня работает



  • @support - помогите разобраться, что не так делаю?
    здесь работает
    0_1482024685005_232323.png
    а в проекте нет - какие действия или настройки не так делаю?
    0_1482024502441_xpath_test.xml


  • administrators

    @Turutur
    Либо используйте

    //div[contains(@class, "b-layout__txt_fontsize_11")]/a[last()]/text() и Xpath получить xml
    либо
    //div[contains(@class, "b-layout__txt_fontsize_11")]/a[last()] и Xpath получить текст



  • @support said in Визуальный конструктор блоков для реализации логики:

    //div[contains(@class, "b-layout__txt_fontsize_11")]/a[last()]/text()

    спасибо!


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.