Завантаження файлу на сайт. Використання об'єкта inputfile.
На численні прохання наших читачів ми вирішили почати цикл статей, які допоможуть вам зрозуміти, як самостійно можна вирішувати ті чи інші завдання за допомогою Human Emulator. І почнемо ми з завантаження файлу на сайт.
Це може виглядати наступним чином:
Або ж нам потрібно залити файл на файлообмінник, наприклад на depositfiles.com:
Або ж на будь-який інший сайт, де використовуються поля завантаження файлу
Приклади полів завантаження файлу на полігоні humanemulator.net
Завантаження файлу в html здійснюється через тег Для роботи з цим тегом в Human Emulator є об'єкт inputfile. Можливості цього об'єкта описані тут Для заповнення полів завантаження файлу використовуються команди $ inputfile-> set_value_by_name і $ inputfile-> set_value_by_number. Скрипти з прикладами цих команд можна знайти в закладці Швидкий старт в папці "Tests \ DOM \ inputfile \ common".
Тепер напишемо скрипт для дошки emarket.ua. Отже, переходимо в Хуманн на emarket.ua. Далі заходимо на сторінку додавання товару і знаходимо поле, в яке потрібно додати фотографії. Замість поля введення шляху до файлу бачимо кнопку з текстом "+ Додати". Після натискання на неї у нас з'являється системний діалог відкриття файлу з заголовком "Виберіть файли для відправки за допомогою emarket.ua". На різних системах заголовок діалогу може відрізнятися.
Для обробки цих діалогів в Human Emulator є спеціальна функція $ window-> execute_open_file ($ text, $ path, $ btn_text, $ exactly = true, $ thread = false) ;. Тепер в скрипті нам просто потрібно натиснути на кнопку і викликати обробку діалогу, що з'явився.
Для цього кликнемо правою кнопкою миші на кнопці з текстом додати "+ Додати". Виберемо пункт меню "Клацнути", підменю $ object-> click_in_by_name ( "uploadButton") ;. Цей рядок з'явитися в скрипті.
Примітка: Для роботи з об'єктами краще використовувати функції, які працюють на ім'я або id або іншому унікальному атрибуту елемента, так як при додаванні ще одного елемента такого ж типу номера можуть змінитися і скрипт припинить роботу. Вам знову доведеться проставляти в скрипті номера. Якщо сайт змінюється не часто, то в принципі в цьому немає нічого страшного, якщо ж сайт змінюється регулярно, то це може швидко втомити.
Запустимо скрипт. Нічого не відбувається. Функція click_in_by_name має параметри ($ name, $ x = -1, $ y = -1, $ frame = -1); Спробуємо передати координати кнопки в цю функцію. Для отримання координат скористаємося функціями $ object-> get_x_by_name і $ object-> get_y_by_name в скрипті це буде виглядає так:
Якщо кнопка не видима в браузері, то клік на неї може не пройти. Тому при кліці на який-небудь елемент в Human Emulator, браузер програми автоматом переходить на цей елемент, так що б він став видимим. При цьому може змінитися Y координата елемента. Але елемент при цьому буде завжди в нижній частині браузера, тому ми можемо прив'язати Y елемента до висоти браузера. У підсумку скрипт буде:
Запускаємо скрипт. Відкрився діалог вибору файлу. Тепер нам потрібно додати обробку цього діалогу за допомогою функції $ window-> execute_open_file ($ text, $ path, $ btn_text, $ exactly = true, $ thread = false). На жаль, опису цієї функції на humanemulator.net немає. Тому опишемо параметри, які потрібно передавати у функцію: $ text - це заголовок діалогу повністю або частково; $ Path - шлях до однієї або декількох картинок, якщо ви передаєте кілька картинок, то вони повинні бути в лапках і через пробіл - "c: \\ picture1.jpg" "c: \\ picture2.jpg" "c: \\ picture3 .jpg "і т.д .; $ Btn_text - текст кнопки, на яку треба клікнути, причому текст цей повинен повністю відповідати тексту всередині вікна кнопки. Тобто, якщо ми натиснемо на alt, то побачимо підкреслену букву, значить перед цією буквою стоїть символ . Так в нашому випадку текст кнопки буде Відкрити. $ Exactly - говорить про те повністю або частково заданий заголовок діалогу. За замовчуванням цей параметр true, тобто суворе відповідність параметра $ text заголовку діалогу. $ Thread - останній параметр говорить, про те чи потрібно запускати цю функцію в окремому потоці чи ні. Що це означає? Діалоги можуть бути модальні і не модальні. Модальний діалог блокує всі інші вікна програми так, що користувач не може з ними нічого зробити, поки не закриє діалог. Немодальний діалог більше схожий на звичайні вікна, т. К. Він дає користувачеві можливість доступу до решти вікон програми. Найпростіший спосіб визначити модальний або НЕ модальний діалог це відкрити його і клікнути на будь-яке інше вікно програми, якщо ми почуємо звук beep, то це модальний діалог, якщо ж ми перейшли на вікно, значить діалог не модальний. У випадку з модальним діалогом параметр thread має дорівнювати true і функція execute_open_file повинна викликатися перед кліком на елемент, який відкриває діалог вибору файлу. Для НЕ модального діалогу thread = false і функцію можна викликати після появи діалогу.
На emarket.ua як і на більшості дощок використовується модальний діалог, тобто він блокує доступи до всіх інших вікон програми. Тепер скрипт буде:
Ось і готово. Але у даного способу є свої мінуси. При багатопотоковому використанні скрипта з таким кодом може виникнути ситуація, коли один скрипт вставляє файли в діалогове вікно відкрите іншим скриптом. Якщо файли однакові то це не страшно, а от якщо ні, то це вже не добре. Можна, звичайно, написати код який буде перевіряти обробляє чи в даний момент якийсь скрипт цей діалог чи ні, але краще піти шляхом використання безпосередньо поля через функції set_value_by_ *. Обробка завантаження файлів таким способом буде простіше і працювати швидше. В останніх версіях програми дана проблема вирішена і тепер кожна копія працює зі своїм відкритим діалогом.
Для даної дошки це можна вирішити через натискання на посилання з текстом "простою формою завантаження фото". Після натискання на цю посилання показуються поля введення шляху до файлу, який треба завантажити. І в даному випадку скрипт буде:
З практики написання скриптів, є моменти, коли $ inputfile-> set_value_by_name потрібно викликати двічі інакше він не заповнює поле. Або якщо поле знаходиться в формі, то він може не відображати текст в поле на сайті, але при Сабміт форми цей шлях буде проходити. Так само можна, знаходити приховані елементи , в які додається вводиться вами шлях через java script і пробувати додавати шлях до файлу безпосередньо в цей елемент, навіть якщо його не видно на сторінці. Так само потрібно звернути увагу на те, що при додаванні шляху до файлу повинен бути дотриманий формат шляху, тобто шлях повинен починатися з диска, наприклад: c: \\, інакше текст може не завантажувати в поле.
Нижче наведені приклади скриптів для роботи з дошками і файлообмінниках, на які потрібно завантажити два малюнки з заданої папки. При цьому можна використовувати, як роботу через діалоги вибору файлу, так і через завдання значення поля введення шляху до файлу.
Скрипт додавання декількох файлів на emarket.ua
Скрипт додавання декількох файлів на ria.ua
Скрипт додавання декількох файлів на depositfiles.com
Приклад завантаження фото на одну з дощок, використовуючи функцію set_value_by_name
Скрипти написані в XHE 4.4.19 MT.