Куда скачивается файл в шаблоне

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Подскажите, куда скачивается файл по клику со страницы и как его после скачивания взять и загрузить по FTP на указанный сервер?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 505
Благодарностей
5 923
Баллы
113
Подскажите, куда скачивается файл по клику со страницы и как его после скачивания взять и загрузить по FTP на указанный сервер?
По дефолту в папку Trash в директории программы. В шаблоне можно указать свою папку экшном Браузер>Настройки - Папка для загрузки файлов.
Trash.png
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Хммм. Спасибо но видимо не совсем то что мне нужно. Нужно сделать следующее действие. Найти на странице анкор, кликнуть по нему, скачается файл. Взять скаченный файл и залить по FTP на другой сервер. Этих файлов будет много и они буду с разными именами. Я так понимаю что лучше тогда использовать переменные. Скаченный файл положить в переменную и далее использовать ее дла заливки на сервер. После заливки возвращаемся к первоначальному экшену, ищем анкор, кликаем и т.д.
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 505
Благодарностей
5 923
Баллы
113
Хммм. Спасибо но видимо не совсем то что мне нужно. Нужно сделать следующее действие. Найти на странице анкор, кликнуть по нему, скачается файл. Взять скаченный файл и залить по FTP на другой сервер. Этих файлов будет много и они буду с разными именами. Я так понимаю что лучше тогда использовать переменные. Скаченный файл положить в переменную и далее использовать ее дла заливки на сервер. После заливки возвращаемся к первоначальному экшену, ищем анкор, кликаем и т.д.
Да, после скачивания нужно взять путь к файлу, сложить в переменную и вставить в экшн FTP. Пути к файлам можно взять через действия с файлами и директориями - http://zennolab.com/wiki/ru:actions:files
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Спасибо! Только вот не понятно как взять и положить в переменную именно тот файл который скачался в экшене? Вот мой пример, ищем на странице текст, кликаем по нему.
upload_2016-1-25_15-37-41.png
 
Последнее редактирование:

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 505
Благодарностей
5 923
Баллы
113
Переменные окружения - Page.LastDownloadedFile
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Да нашел, спасибо! Теперь при закачке этого файла в логах ошибки при том что файл на сервер загружается. Что тут может быть не так? Почему экшен пытается создать папку?

upload_2016-1-25_15-57-32.png
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 505
Благодарностей
5 923
Баллы
113
Что-то с правами доступа на FTP. Какой билд используете?
 
  • Спасибо
Реакции: one

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 505
Благодарностей
5 923
Баллы
113
Пишет, что невозможно создать директорию.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Последний, 5.9.7.1. Хммм, с правами? Но ведь файл пишется куда надо и причем тут сообщение о не возможности создание директории? Права на папку куда загружается файл стоят 751 это корень сайта.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Разобрался, методом подбора пути на сервере. От имени пользователя надо было указывать а не от корня диска.
 
  • Спасибо
Реакции: VladZen

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Продолжу в этом же топике. После действия на странице надо дождаться появления кнопки, до ее появления висит текст "Pending". чем задать условие ждать и при появлении нажать?
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 505
Благодарностей
5 923
Баллы
113
Продолжу в этом же топике. После действия на странице надо дождаться появления кнопки, до ее появления висит текст "Pending". чем задать условие ждать и при появлении нажать?
Вот эта тема поможет - http://zennolab.com/discussion/threads/kak-v-cikle-sravnit-opredelennyj-ehlement-na-stranice-v-c.21646
 
  • Спасибо
Реакции: one

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 130
Баллы
113
C#
C#:
HtmlElement he;
for(int i = 0; i < 20; i++) // 20 - количество повторений в цикле
{
    he = instance.ActiveTab.FindElementByAttribute("input:text", "id", "text", "text", 0); // Тэг, Имя атрибута, Значение, Тип поиска, № совпадения (параметры как в конструкторе действий)
    if(!he.IsVoid)
    {
        he.RiseEvent("click", "Full");
    }
    System.Threading.Thread.Sleep(2000); // Пауза, мс
}
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Я так понимаю, нужно использовать "Свой код С#" в нужном месте? Внес параметры, при запуске экшена в логах ошибка http://joxi.ru/ZrJpyQJu1k1RZ2 в строке 3 в коде скобка. Тут еще момент один, по появившейся кнопки я создал экшн в конструкторе действий при его выполнении, пока нужная кнопка не появиться на странице экшн тыкает в другую кнопку.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 130
Баллы
113
Я так понимаю, нужно использовать "Свой код С#" в нужном месте?
Верно!
Внес параметры, при запуске экшена в логах ошибка http://joxi.ru/ZrJpyQJu1k1RZ2 в строке 3 в коде скобка.
Если в параметре "Значение" присутствуют символы \ , то поставьте перед кавычками @ .
Тут еще момент один, по появившейся кнопки я создал экшн в конструкторе действий при его выполнении, пока нужная кнопка не появиться на странице экшн тыкает в другую кнопку.
Не совсем понял вопрос.

Чуть подправил код
Код:
HtmlElement he;
for(int i = 0; i < 20; i++)
{
    he = instance.ActiveTab.FindElementByAttribute("button", "class", @"button\ button_size_m", "regexp", 0);
    if(!he.IsVoid)
    {
        he.RiseEvent("click", "Full");
        break;
    }
    System.Threading.Thread.Sleep(1000);
}
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Да, присутствуют символы "\". Указал перед @ и сейчас экшн выполняется, спасибо! Я правильно понимаю работу экшена понимаю? В нем 20 циклов с задержкой 1000мс каждый цикл проверяет наличие соответствия и как оно будет найдено, циклы прервутся и можно переходить к следующему экшену. Так? Или он сам выполнить нужное действие "click". У меня клика не сделал а просто отработал.
Не совсем понял вопрос.
Пропустим этот момент.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 130
Баллы
113
Я правильно понимаю работу экшена понимаю? В нем 20 циклов с задержкой 1000мс каждый цикл проверяет наличие соответствия и как оно будет найдено, циклы прервутся и можно переходить к следующему экшену. Так? Или он сам выполнить нужное действие "click". У меня клика не сделал а просто отработал.
Все верно!
Клик должен выполниться (строка: he.RiseEvent("click", "Full");), если элемент найден. Можете убрать эту строку, оставив только break; и отдельно следующим экшеном выполнить клик.
Добавьте в код условие для выхода по красной стрелке, если элемент не будет найден, если нужно. В конец кода добавьте строку:
Код:
throw new Exception("Элемент не найден!");
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Добавьте в код условие для выхода по красной стрелке, если элемент не будет найден, если нужно. В конец кода добавьте строку:
После закрывающей скобки или до нее?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 130
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Добавил эту строку и при любом раскладе, выход из экшена по красной стрелке. т.е. получается так, экшен дожидается кнопки, делает по ней клик, потом таймаутит (страно за чем если результат Ок и в переменную положили его и долго как то) и делает выход по красной стрелке.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 130
Баллы
113
Добавил эту строку и при любом раскладе, выход из экшена по красной стрелке. т.е. получается так, экшен дожидается кнопки, делает по ней клик, потом таймаутит (страно за чем если результат Ок и в переменную положили его и долго как то) и делает выход по красной стрелке.
Значит не находит элемент (кнопку) за указанное время, поэтому долго (тайм-аут * количество циклов). Два варианта:
1. Не верные параметры.
2. Увеличить время ожидания или количество циклов.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Хммм... Но клик по кнопке происходит как она появляется, действие выполняется я вижу.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 130
Баллы
113
Хммм... Но клик по кнопке происходит как она появляется, действие выполняется я вижу.
Сорри, я тупанул!
Если добавили строку throw new Exception("Элемент не найден!");
то break; замените на return "ok";
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Сорри, я тупанул!
Бывает! :-) Я вот тоже, каким то образом пропустил в коде break; и экшн отрабатывал по полной. Исправил, сейчас отрабатывает до момента нажатия. Спасибо!
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
А вот и фик! Переходит к следующему экшену не дождавшись появления кнопки. Таймаут поставил 5000, не помогло. переход происходит сразу же.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 130
Баллы
113
А вот и фик! Переходит к следующему экшену не дождавшись появления кнопки. Таймаут поставил 5000, не помогло. переход происходит сразу же.
Отрабатывает норм (https://www.yandex.ru/)
Код:
HtmlElement he;
for(int i = 0; i < 20; i++)
{
    he = instance.ActiveTab.FindElementByAttribute("a", "innertext", "Посещаемое", "regexp", 0);
    if(!he.IsVoid)
    {
        he.RiseEvent("click", "Full");
        return "ok";
    }
    System.Threading.Thread.Sleep(1000);
}
throw new Exception("Элемент не найден!");
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Ну хоть тресни, в моем случае нет. Проверяю шаблон по шагово. Если при переходе на Ваш снипет кнопка не появилась он уходит на следующий экшен. Если при переходе на Ваш снипет кнопка появилась он ее жмет и переходит на следующий экшн. Такое ощущение что снипет долбит просто в ту точку где ему указано.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 842
Благодарностей
1 275
Баллы
113
Проблема в том что код кнопки на странице присутствует всегда но он первоначально спрятан. Вот и долбит Ваш сниппет не смотря ни на что. Как можно исправить ситуацию? Вот код самой кнопки:

Код:
<div tabindex="0" class="goog-inline-block jfk-button jfk-button-standard" role="button" style="-moz-user-select: none;">Добавить</div>
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)