Разные циклы используют одну переменную [[CYCLE_INDEX]]



  • Скрипт просматривает моих читателей в твиттере, находит тех, кого не читаю и нажимает кнопку "Читать". Такой алгоритм нормально работает. Когда добавляю дополнительное условие проверки (сверка со списком), возникает конфликт.
    alt text

    Первый цикл использует переменную CYCLE_INDEX.

    Второй цикл, который сверяет со списком, тоже накручивает переменную CYCLE_INDEX

    Когда доходит очередь до выполнения Двигать Мышь И Кликнуть На Элемент , скрипт зависает.

    При выполнении первого цикла CYCLE_INDEX имеет значение 2,3,5

    После выполнения второго цикла значение CYCLE_INDEX увеличивается на количество строк в списке и получается 45...52... и так далее.

    Вопрос: как назначить для команды Foreach отдельную переменную?

    Пробовал CYCLE_INDEX переименовывать в CYCLE_INDEX2, но так программа останавливается с сообщением об ошибке.

    Или как еще можно организовать работу вложенных циклов?

    Вот скрип на всякий случай
    0_1483047520949_Twi-test-02.xml



  • Можно решить созданием перед циклом новой пременной и в цикле уже увеличивать ее



  • А как эту переменную привязать к конкретному циклу?
    Просто в начале цикла создать и цикл ее начнет использовать?



  • Нет, создать перед циклов, а в начале цикла ее увеличивать



  • Поздравляю всех с наступившим 2017 годом!

    alt text

    А у меня новые вопросы в Новом году. Нужно просматривать сообщения по порядку. В каждом сообщении взять название аккаунта, сверить со списком, при положительном ответе кликнуть на сердечко.

    Все сообщение помещено в родительский контейнер слой (div) с селектором:

    div > div.content
    

    выделенный на рисунке красным цветом.

    Внутри находится слой

    div > div.content > div.stream-item-header > a
    

    с названием аккаунта (зеленый на рисунке)

    Так же есть отдельный слой с сердечком (синий на рисунке)

    div > div.content > div.stream-item-footer > div.ProfileTweet-actionList.js-actions >
    

    по которому нужно кликать.

    Команда Начать цикл привязывается к слою div > div.content, внутри которого находятся все остальные.

    Команда Получить Код Элемента :

    [[FOR_EACH_CSS >]]<[[CYCLE_INDEX]]>
    

    будет брать код всего родительского контейнера (более 300 строчек кода и много килобайт)

    Чтобы выбрать для обработки более узкую область, пробовал Получить Код Элемента указывать так:

    [[FOR_EACH_CSS > div.stream-item-header > a]]<[[CYCLE_INDEX]]>
    

    и так:

    [[[[FOR_EACH_CSS]] > div.stream-item-header > a]]<[[CYCLE_INDEX]]>
    

    и так:

    ([[FOR_EACH_CSS]] > div.stream-item-header > a)<[[CYCLE_INDEX]]>
    

    Не работает никак.

    Я делаю синтаксическую ошибку, не правильно пишу команду, или такая команда в принципе не может работать?



  • @servasw45 Вот пример как я беру "n"-ый элемент в поле с типом Expression
    '#search_more_results > div:nth-of-type(' + VAR_CUR_INDEX + ') .labeled.name > a';
    Для поля с типом String, будет выглядеть примерно так:
    #search_more_results > div:nth-of-type([[CUR_INDEX]]) .labeled.name > a

    Тут конечно если ты шаришь в селекторах css.
    VAR_CUR_INDEX это переменная [[CUR_INDEX]], я её использую в самом внутреннем цикле.

    Подробнее о css селекторе
    тут - http://htmlbook.ru/css/nth-of-type

    И еще, лично у меня в работе с динамическим контентом, к примеру вк стена с автоподгружением элементов, FOR_EACH_CSS работает ровным счетом "на 1 итерацию", так что обходился без этого(надеюсь у тебя все ок с этим)


  • administrators

    @servasw45

    Когда доходит очередь до выполнения Двигать Мышь И Кликнуть На Элемент , скрипт зависает.

    Да, есть такой баг, при выходе из внутреннего цикла, CYCLE_INDEX не содержит значение для внешнего цикла. Это будет исправлено. Пока можно воспользоваться тем, что значение CYCLE_INDEX вначале работы цикла всегда правильное и сохранить его в отдельную переменную.


  • administrators

    @servasw45 Селектор равный селектор1 селектор2 (между ними пробел) будет искать селектор2 содержащийся внутри селектор1.

    Например, если твитт ищется по селектор1, а ник по .username, то искать ник создавший конкретный твитт можно по селектор1 .username

    такая запись

    [[FOR_EACH_CSS]] .username<[[CYCLE_INDEX]]>
    

    значит ник внутри твитта с номером CYCLE_INDEX
    Пример проекта
    0_1483531961641_twitterforeach.xml



  • @support

    на сегодня (спустя год этому топику) опять столкнулся с необходимостью пересохранять переменные CYCLE_INDEX во вложенных циклах, думал, что ситуация исправлена. Или я чего-то недосмотрел?



  • @jurassik said in Разные циклы используют одну переменную [[CYCLE_INDEX]]:

    @support

    на сегодня (спустя год этому топику) опять столкнулся с необходимостью пересохранять переменные CYCLE_INDEX во вложенных циклах, думал, что ситуация исправлена. Или я чего-то недосмотрел?

    причем ситуация та же и с FOR_EACH_CSS

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

    решил вложенные циклы завернуть в функции c сохранением на входе и восстановлением этих имен на выходе

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

    ДОЛГО МУДОХАЛСЯ, НО РЕШИЛ ПРОБЛЕМУ, ОКАЗАЛОСЬ:

    1. Что на переменную CYCLE_INDEX так же влияет вложенный цикл (в том числе во вложенных функциях) WHILE(УСЛОВИЕ)...
    2. В циклах по элементам есть еще одна переменная VAR_ "ELEMENT_LENGTH" (к ней нет доступа через переменные обычным способом [[ELEMENT_LENGTH]], решил через expression)

    РЕЗЮМЕ:
    Добавил обертывание таких циклов сохранением-восстановлением
    VAR_FOR_EACH_CSS,
    VAR_CYCLE_INDEX,
    VAR_ ELEMENT_LENGTH,
    и, где это было возможно, применил другие методы.


Log in to reply
 

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