Реализация сценария

Добрый день!

Посоветуйте как можно реализовать сценарий скринкаст которого по ссылке?

это скринкаст сценария https://youtu.be/YpdRh3gKW0k

Здравствуйте!

Реализовать можно прямо “в лоб” - раздел “Браузер” и функции оттуда. Процесс выглядит легко.
Второй вариант - это попробовать воспользоваться API, который предоставляет Bitrix. Здесь надо изучить, есть ли в методах API тот, который позволит получить данные сделки, включая комментарий, и есть ли метод, который позволит обновить данные сделки, включая то поле.

Но и через браузер должно реализовываться просто.

Спасибо за ответ.

Делаю через xPath таким образом https://yadi.sk/i/dY9ukSRbNpftPA
В итоге накатывается галочка на строку, а должен открываться такой слайдер https://yadi.sk/i/Jzzu82HlqppCxQ

что делаю неправильно?

накатывается такая галочка https://yadi.sk/i/BxnSgw2N6qSbUg

При этом робот пишет, что все прошло успешно.

11/8/2019, 4:17:46 PM
Робот успешно выполнил алгоритм, ошибок при реализации не произошло

Пока трудно сходу сказать, давайте сделаем вот как.

  1. Запишите видеозапись, так будет легче разобраться.
  2. Там, где html-код изображен, нажмите ctrl + F и введите Ваш XPath-селектор. Посмотрите, что он Вам возвращает в качестве найденного.
  3. В третьих, я предлагаю подойти к вопросу иначе. Сначала извлечь все ссылки на сделки в массив, а потом просто поочередно переходить в каждую из них через Open URL. Попробуйте в поиск вбить такой CSS-селектор: div[class='crm-info-title-wrapper'] a и покажите, что он находит.

Не открывается нужная ссылка. На скринкасте показал проблему.
Как это можно исправить?

ошибка из той же области. как ее можно исправить?

Нужно работать над селекторами. Именно поэтому перед копированием я предлагаю проверять, что конкретно находит Хром, когда вводите селектор. Селекторы можно делать короче и при этом надежней и устойчивей. Скорее всего, когда робот открывает браузер, происходит какое-то незаметное изменение в верстке страницы. Мы глазом это не особо видим, а вот в html-коде что-то могло сместиться/“переехать”. И индекс 2, например, может внезапно указывать уже на другой столбец.

Давайте разберемся сначала с первой историей - научимся перебирать все элементы таблицы (все сделки). Тот селектор, который я Вам предложил, введите в поиске и посмотрите, что он выдает. Речь шла про ту таблицу со сделками. Можете записать видеозапись также. Моя цель - найти селектор, которому будут соответствовать заголовки всех 20 делок, которые отображаются на одной странице. Позже объясню подробнее, зачем.

1 Симпатия

Сделал как вы рекомендовали. тоже самое

что можно еще попробовать?

А Вы вперёд забежали :slight_smile: Я пока просто просил проверить селектор. Что делать дальше, я скажу.

Отлично! Находит название сделки и цепляет клиента. Клиент нам не нужен, значит, селектор надо немного подкорректировать, чтобы не искал чего лишнего. Пока сходу не готов ответить, как это сделать аккуратно, но это точно можно сделать.

Но давайте попробуем выкрутиться по-другому. Скажите, а фраза “Заявка на внедрение присутствует вообще всегда”?

Да, фраза “Заявка на внедрение" присутствует вообще всегда

Отлично! Спасибо.
Нам потребуется немного времени, чтобы описать ход решения. В принципе для этого сейчас почти все есть. Завтра в течение дня ответим.

Супер! Спасибо. Ждем

Итак, после того, как Вы роботом попали на страницу со сделками, делать надо следующее.

  1. Использовать функцию “Прочитать свойство элемента” из раздела браузер.
  2. В качестве селектора указать XPath и сам селектор вставить следующий: //div[@class='crm-info-title-wrapper']//a[contains(text(), 'Заявка на внедрение')]. Такой селектор выберет нам все элементы таблицы, где содержится текст “Заявка на внедрение” (здесь проверьте, чтобы сама фраза совпадала символ в символ.
  3. В этой же функции в качестве свойства указать href.
  4. В этой же функции отметить галочку “Несколько элементов”.
  5. Добавить после этой функции функцию “Задать значение переменной”, отметить в ней опцию “Сохранить результат предыдущего шага”, название переменной можно дать любое, здесь я ее назову deal_links_array.
  6. В роботе сделать цикл. Счетчик пусть называется counter, цикл выполняется пока выполнено условие counter < deal_links_array.length.
  7. В теле цикла (то, что соответствует ветке “Да”) добавить функцию “Открыть URL”, в которой в опции “Вычислить значение” прописать deal_links_array[counter].
  8. В теле цикла последним действием не забыть увеличить счетчик: counter = counter + 1 или counter++, если использовать “Выполнить код”.

Что мы этим сделали. Мы одним разом извлекли ссылки на все присутствующие сделки в таблице на данной странице. За саму ссылку в селекторе обычно отвечает атрибут href, именно поэтому мы выбрали все селекторы с названиями сделок и извлекли у них свойство href. Далее мы циклично просто переходим по ссылке в каждую сделку.

Для начала сделайте так и убедитесь, что робот бегает по всем сделкам, то есть что он реально перешел во все 20 сделок. После этого уже тело цикла можно будет наполнять конкретными действиями со сделками, выделять что-то в отдельные подпрограммы и так далее.

Вот так примерно должен выглядеть алгоритм с извлечением сделок.

А вот так примерно должен выглядеть цикл

Георгий, добрый вечер!

сделал по инструкции.
записал скринкаст https://youtu.be/06IrxP9s6Ck
робот извлекает переменные, но на страницы не переходит.
где я допустил ошибку?

@HarryScreamer, в пункте 6 я писал:

В роботе сделать цикл. Счетчик пусть называется counter , цикл выполняется пока выполнено условие counter < deal_links_array.length .

Правда, на скриншоте я опечатался в условии. Именно по этому Вы его и повторили. Исправьте условие на то, что я написал выше. То условие, которое сейчас, не имеет никакого логического смысла, опечатка :frowning:

Затупил, сорри.
Исправил. все заработало.
Что дальше?)

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

Вы можете создать отдельную подпрограмму. В эту подпрограмму добавить действия, которые должна совершать программа с одной сделкой. И после вставить эту подпрограмму в тело цикла :slight_smile:

Не получается прочитать значение элемента.


что я делаю неправильно?