Почему не запускается цикл?

Поддержка
  • Мне нужно собрать телефоны со странички
    https://www.igrit.pl/kategoria/gielda-ziemniakow-chipsowe-43?type=2&category=gielda-ziemniakow-chipsowe-43&page=1

    Как я это делаю:

    1. Загружаю страничку
    2. Копирую весь html код в переменную
    3. Извлекаю первый номер телефона из блока (физически из переменной)
    4. Извлекаю второй номер телефона из блока (физически из переменной)
      ...

    Вот сам скрипт:
    Парсинг igrit.pl v2.xml

    Проблема в том, что цикл по всем блокам никак не хочет запускаться.

    0_1547119532202_1.png

    Вот сам блок на сайте:
    0_1547118689341_1.png

    Условие вхождения в цикл - наличие куска кода
    <h3 class="font-weight-bolder mt-0 mb-2" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100%; font-size: 20px;">
    То есть я проверяю, существует ли заголовок блока <h3>

    Почему цикл не хочет запускаться?

  • @morozover said in Почему не запускается цикл?:

    Условие вхождения в цикл - наличие куска кода
    <h3 class="font-weight-bolder mt-0 mb-2" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100%; font-size: 20px;">
    То есть я проверяю, существует ли заголовок блока <h3>
    Почему цикл не хочет запускаться?

    Прочитайте описание действия "Начать Цикл"
    0_1547122009872_e784f877-c195-43ce-8c17-1a1f7ad8b3b5-изображение.png
    Начать цикл по все элементам страницы соответствующим запросу.

    Вот ваш селектор для этого действия:

    >MATCH><h3 class="font-weight-bolder mt-0 mb-2" style="white-space: nowrap; overflow: hidden; text-overflow: ellipsis; width: 100%; font-size: 20px;">AT>[[PAGE_HTML]]
    

    В переменную [[PAGE_HTML]] вы получаете весь код страницы, но зачем то пытаетесь его использовать с префиксом >AT>[[PAGE_HTML]]


    В префиксе >AT> можно использовать только целые, положительные числа (Integer) Вот мануал по селекторам.

  • @fox
    Проблема в том, что на страничке есть несколько телефонных номеров (в каждом блоке - один номер), и мне нужно как-то организовать перебор всех блоков.

    Поэтому я и добавил условие цикла - наличие <h3> (это заголовок блока).
    В условие цикла добавлена переменная [[PAGE_HTML]], потому что именно в ней хранится html-код странички. И именно в коде я и ищу номера телефонов.

    Как же мне тогда извлечь из кода странички все кусочки:

    </p></a> <div data-phone="516091104" class="bottom-post d-flex justify-content-between">
    
    </p></a> <div data-phone="664425230" class="bottom-post d-flex justify-content-between">
    

    Цифры и есть искомые телефонные номера.
    </p></a> – добавлены потому, что каждый блок <div data-phone="" присутствует в коде странички в двух экземплярах. И только перед одним есть код </p></a>.

    Если бы такой кусочек кода был единственным в коде странички - это было бы просто. Но их несколько.

    Как же мне всё-таки сделать так, чтобы цикл заработал?

  • @morozover said in Почему не запускается цикл?:

    Поэтому я и добавил условие цикла - наличие <h3> (это заголовок блока).

    Условие определяется условным оператором if. В действие "Начать цикл" нужно указать селектор, который найдёт несколько элементов, которые это действие и переберёт по очереди в цикле. Префикс >AT> указывает какой по счёту взять селектор, а у вас в место цифры указан код страницы.


    Вы бы хотя бы описания действий почитали..


    @morozover said in Почему не запускается цикл?:

    Как же мне тогда извлечь из кода странички все кусочки:

    Если искомая информация есть в коде html страницы, извлечь её оттуда удобнее будет через xpath.

  • @morozover Действие "xpath получить каждый xml" с выражением

    //div[@class="prize-tag"]/@data-phone
    

    вернёт список всех номеров телефона на странице.


    Вот скрипт, в цикле собирает номера в список [[NEW_LIST]].

  • @fox

    Спасибо.
    Единственная загадка для меня - почему цикл работает в разных случаях по-разному.

    Вот так работает корректно:

    1. Загружаю страничку
    2. Создаю цикл по всем элементам <h3...>

    А вот так цикл вообще не запускается:
    1.Загружаю страничку
    2. Копирую весь html-код в переменную
    3. Создаю цикл по всем элементам <h3...> в переменной (убрал неверное >AT>[[PAGE_HTML]], оставил просто [[PAGE_HTML]])

    Почему не работает во втором случае?

  • @morozover

    @morozover said in Почему не запускается цикл?:

    А вот так цикл вообще не запускается:
    1.Загружаю страничку

    Копирую весь html-код в переменную
    Создаю цикл по всем элементам <h3...> в переменной (убрал неверное >AT>[[PAGE_HTML]], оставил просто [[PAGE_HTML]])

    Почему не работает во втором случае?

    Вы знаете, что такое селектор вообще?

  • @fox
    Я читал справку.
    Но как работает программа - мне не понятно.

    В окне блока «Начать цикл» можно нажать на кнопку «Переменная»:
    0_1547191602719_1.png

    После этого в выражение >MATCH> в конец добавится моя переменная [[PAGE_HTML]].

    Я предполагаю, что это означает, что программа возьмёт содержимое переменной [[PAGE_HTML]] и найдёт в ней все <h3...>.

    Но на деле такой цикл даже не запускается.
    Я пытаюсь понять почему.

  • @morozover said in Почему не запускается цикл?:

    @fox
    Я читал справку.
    Но как работает программа - мне не понятно.

    В окне блока «Начать цикл» можно нажать на кнопку «Переменная»:
    0_1547191602719_1.png

    После этого в выражение >MATCH> в конец добавится моя переменная [[PAGE_HTML]].

    Я предполагаю, что это означает, что программа возьмёт содержимое переменной [[PAGE_HTML]] и найдёт в ней все <h3...>.

    Но на деле такой цикл даже не запускается.
    Я пытаюсь понять почему.

    Значёк из переменной означает, что селектор будет взять из переменной, а вы в него весь код страницы запихиваете. Когда выбираете какой нибудь селектор, в скобках будет написано, сколько элементов по нему найдено, вот по этим, найденым элементам и начинает работать цикл.