Bas Browser Automation Studio: новый инструмент для автоматизации браузерных задач
Bas Browser Automation Studio (BAS) — это бесплатный инструмент для автоматизации веб-браузера, который может ускорить и упростить выполнение повторяющихся задач в Интернете. BAS позволяет создавать скрипты для автоматической навигации по веб-сайтам, заполнения форм, скачивания файлов и многого другого.
Как работает BAS?
BAS создан на основе браузера Chrome и использует инструменты, предоставляемые браузером, такие как DevTools Protocol, для автоматизации задач. Он обеспечивает простой пользовательский интерфейс для создания скриптов, основанных на действиях, выполненных в браузере.
В BAS есть множество встроенных функций, таких как имитация щелчков мыши, нажатия клавиш и заполнения форм. Также можно использовать JavaScript для выполнения более сложных задач.
Как использовать BAS?
С помощью BAS можно автоматизировать многие повторяющиеся задачи, такие как:
- Заполнение форм на веб-сайтах
- Сбор данных с веб-страниц
- Автоматический вход на сайты
- Парсинг веб-страниц и скачивание файлов
- Создание ботов для социальных сетей и мессенджеров
Для использования BAS нужно:
Automa — автоматизация браузера и визуальное программирование
- Скачать и установить BAS на свой компьютер.
- Открыть браузер Chrome через BAS.
- Запустить запись действий и выполнить необходимые задачи.
- Остановить запись и сохранить скрипт.
- Запустить скрипт для автоматического выполнения задач.
Источник: dzen.ru
JavaScript, Node, Puppeteer: автоматизация Chrome и веб-скрапинг
Библиотека puppeteer для Node.js позволяет автоматизировать работу с браузером Google Chrome. В частности, с помощью puppeteer можно создавать программы для автоматического сбора данных с веб-сайтов, так называемые веб-скраперы, имитирующие действия обычного пользователя. В подобных сценариях может применяться браузер без пользовательского интерфейса, так называемый «Headless Chrome». Используя puppeteer , можно управлять и браузером, который запущен в обычном режиме, что особенно полезно при отладке программ.
Сегодня мы поговорим о создании веб-скрапера на базе Node.js и puppeteer . Автор материала стремился к тому, чтобы статья была интересна как можно более широкой аудитории программистов, поэтому пользу из него извлекут как те веб-разработчики, которые уже имеют некоторый опыт работы с puppeteer , так и те, которые впервые сталкиваются с таким понятием, как «Headless Chrome».
Предварительная подготовка
Перед началом работы вам понадобится Node 8+. Найти и загрузить его можно здесь, выбрав текущую (Current) версию. Если вы никогда раньше не работали с Node, взгляните на эти учебные курсы или поищите другие материалы, благо, их в Сети предостаточно.
Как автоматизировать работу в браузере
После установки Node создайте папку для проекта и установите puppeteer . Вместе с ним будет установлена и актуальная версия Chromium, который гарантированно будет работать с интересующим нас API. Сделать это можно с помощью следующей команды:
npm install —save puppeteer
Пример №1: создание копий экрана
После установки puppeteer разберём простой пример. Он, с небольшими изменениями, повторяет документацию к библиотеке. Код, который мы сейчас рассмотрим, делает скриншот заданной веб-страницы.
Для начала создадим файл test.js и поместим в него следующее:
const puppeteer = require(‘puppeteer’); async function getPic() < const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(‘https://google.com’); await page.screenshot(); await browser.close(); > getPic();
Построчно разберём этот код. Сначала покажем общую картину.
const puppeteer = require(‘puppeteer’);
В этой строке мы подключаем ранее установленную библиотеку puppeteer в качестве зависимости.
async function getPic()
Тут представлена главная функция, getPic() . Эта функция содержит код, автоматизирующий работу с браузером.
getPic();
В этой строке мы вызываем функцию getPic() , то есть, выполняем её.
Важно обратить внимание на то, что функция getPic() является асинхронной, она определена с ключевым словом async . В ней используется конструкция async / await из ES 2017. Так как getPic() — функция асинхронная, она, при вызове, возвращает объект Promise . Такие объекты обычно называют «промисами». Когда функция, определённая с ключевым словом async , завершает работу и возвращает некое значение, промис либо будет разрешён (в случае успешного завершения операции), либо отклонён (если произойдёт ошибка).
Благодаря использованию при определении функции ключевого слова async , мы можем выполнять в ней вызовы других функций с ключевым словом await . Оно приостанавливает выполнение функции и позволяет дождаться разрешения соответствующего промиса, после чего работа функции продолжится. Если это всё вам пока не понятно — просто читайте дальше и постепенно всё начнёт становиться на свои места.
Теперь разберём код функции getPic() .
const browser = await puppeteer.launch();
Тут мы запускаем puppeteer . Фактически это означает, что мы запускаем экземпляр браузера Chrome и записываем ссылку на него в только что созданную константу browser . Так как в этой строке использовано ключевое слово await , выполнение основной функции будет приостановлено до разрешения соответствующего промиса. В данном случае это означает ожидание либо успешного запуска экземпляра Chrome, либо возникновения ошибки.
const page = await browser.newPage();
Здесь мы создаём в браузере, управляемом посредством программного кода, новую страницу. А именно, запрашиваем эту операцию, ожидаем её завершения и записываем ссылку на страницу в константу page .
await page.goto(‘https://google.com’);
Используя переменную page , созданную в предыдущей строке, мы можем дать странице команду по переходу на указанный URL. В данном примере мы переходим на https://google.com . Выполнение кода, как и в предыдущих строках, приостановится до завершения операции.
await page.screenshot();
Здесь мы запрашиваем у puppeteer создание скриншота текущей страницы, представленной константой page . Метод screenshot() принимает, в виде параметра, объект. Тут можно указать путь, по которому нужно сохранить скриншот в формате .png . Опять же, здесь используется ключевое слово await , что приводит к приостановке выполнения функции до завершения операции.
await browser.close();
Функция getPic() завершает работу и мы закрываем браузер.
Запуск примера
Вышеописанный код, сохранённый в файле test.js , можно запустить с помощью Node следующим образом:
node test.js
Вот что получится после того, как он успешно отработает:
Замечательно! А теперь, чтобы было веселей (и чтобы облегчить отладку), мы можем выполнить те же действия, запустив Chrome в обычном режиме.
Что бы это значило? Попробуйте и увидите сами. Для этого нужно заменить эту строку кода:
const browser = await puppeteer.launch();
const browser = await puppeteer.launch();
Сохраним файл и снова его запустим с помощью Node:
node test.js
Здорово, правда? Передавая объект в качестве параметра при запуске браузера мы можем наблюдать за тем, как код управляет работой Google Chrome.
Прежде чем идти дальше, сделаем ещё кое-что. Вы заметили, что скриншот, который делает программа, включает в себя лишь часть страницы? Так происходит из-за того, что окно браузера немного меньше размера веб-страницы. Исправить это можно с помощью следующей строчки, меняющей размер окна:
await page.setViewport()
Её надо добавить в код сразу после команды перехода по URL. Это приведёт к тому, что программа сделает скриншот, который выглядит гораздо лучше:
Вот как будет выглядеть итоговый вариант кода:
const puppeteer = require(‘puppeteer’); async function getPic() < const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(‘https://google.com’); await page.setViewport() await page.screenshot(); await browser.close(); > getPic();
Пример №2: веб-скрапинг
Теперь, когда вы освоили основы автоматизации Chrome с помощью puppeteer , разберём более сложный пример, в котором займёмся сбором данных с веб-страниц.
Сначала стоит взглянуть на документацию к puppeteer . Можно обратить внимание на то, что тут имеется огромное количество различных методов, которые позволяют нам не только имитировать щелчки мышью по элементам страниц, но и заполнять формы, и читать со страниц данные.
Автоматизируем любые действия в браузере с iMacros
iMacros — это программа, которая позволяет автоматизировать и имитировать действия пользователя в браузере. По словам разработчиков, iMacros загрузили 9 миллионов раз, но лишь 240 тысяч юзеров активно используют приложение. То есть лишь 3% из установивших продукт нашли ему применение. И неслучайно.
При первом взгляде на документацию сложно разглядеть его удивительные, поражающие воображение возможности. Эта статья откроет их для тебя.
Другие статьи в выпуске:
Хакер #185. Докажи баг!
- Содержание выпуска
- Подписка на «Хакер» -60%
Установка
Есть два варианта установки iMacros:
- в качестве расширения (add-ons) для браузера (Firefox, Chrome или Internet Explorer),
- как отдельное приложение (только для Windows).
В описанных ниже примерах использован iMacros Firefox add-on.
Hello world
Основной прием, которому стоит научиться, — запись действий в браузере и последующее их воспроизведение. Перейдем на вкладку Record на панели в левом нижнем углу экрана и нажмем на кнопку Record Macro. Теперь вобьем в Google «Hello world» и нажмем Enter. Потом кнопку Stop (под кнопкой Record Macro). iMacros сгенерировал код, который можно многократно запускать и редактировать:
VERSION BUILD=7020226 RECORDER=CR URL GOTO=https://www.google.ru/?gfe_rd=cr ‘открываем страницу добавления товара URL GOTO=http://example.com/newproduct ‘записываем значение первого поля файла CSV в форму для названия товара TAG POS=1 TYPE=INPUT:TEXT FORM=ID:new_product ATTR=ID:product_title CONTENT= > ‘записываем значение второго поля файла CSV в форму для короткого названия товара TAG POS=1 TYPE=TEXTAREA FORM=ID:new_product ATTR=ID:product_short_description CONTENT= > ‘третье и четвертое поле — аналогично TAG POS=1 TYPE=INPUT:TEXT FORM=ID:new_product ATTR=ID:product_variants_attributes__price CONTENT= > TAG POS=1 TYPE=INPUT:TEXT FORM=ID:new_product ATTR=ID:product_variants_attributes__quantity CONTENT=> ‘после ввода всех данных о товаре сохраняем его в каталог TAG POS=1 TYPE=INPUT:BUTTON FORM=ID:new_product ATTR=* // А вот так выглядит products.csv: «Товар 1″,»Опиcание товара 1″,»555″,»7» «Товар 2″,»Опиcание товара 2″,»722″,»13» «Товар 3″,»Опиcание товара 3″,»234″,»9» «Товар 4″,»Опиcание товара 4″,»301″,»11»
Извлечение данных из веб-страниц
А теперь представим обратную ситуацию. Когда нужно просмотреть каталог магазина-конкурента и сохранить информацию о товарах.
‘Этот код извлекает текстовое содержимое из абзацев, имеющих атрибут «class», равный «product_description» TAG POS=1 TYPE=P ATTR=CLASS:product_description EXTRACT=TXT ‘А этот сохраняет его в файл SAVEAS TYPE=TXT FOLDER=»C:» FILE=»product_desc.txt» ‘А вот команда для запуска диалогового окна сохранения картинки и нажатия кнопки подтверждения: TAG POS=1 TYPE=IMG ATTR=ID:product_image CONTENT=EVENT:SAVEITEM ONWEBPAGEDIALOG KEYS=2>1>
Естественно, весь этот код можно использовать в цикле с динамическими переменными.
Вызов iMacros из кода
Любой макрос можно сохранить в файле с расширением iim и использовать в приложениях, написанных на 16 языках программирования. Только надо не забыть установить полную версию (не аддон) iMacros на компьютер или веб-сервер.
Поддерживаемые языки
WWW
- Пользователи iMacros для Firefox могут делиться между собой исходниками с помощью закладок Delicious. Подробности здесь: wiki.imacros.net/iMacros_for_Firefox#Bookmarking
- Полный мануал по iMacros: wiki.imacros.net
- Сайт производителя: imacros.net
Batch-файлы
Вызов iMacros из батников — наиболее простой и удобный путь автоматизировать их выполнение. Достаточно одной строки для запуска макроса:
«ProgramFilesiOpusiMacrosiMacros.exe» -macro «….MacrosDemoRegExpSearch.iim»
C++
Основная сложность в использовании iMacros под C++ — настройка среды разработки (конкретику по версиям различных сред ищи в документации или спрашивай у саппорта). Принцип работы кода такой же, как в PHP:
IAppPtr app = IAppPtr(__uuidof(App)); Status s = app->iimInit(«», true, «», «», «», cTimeout); s = app->iimPlay(«wsh-extract-rate», cTimeout); // Запуск wsh-extract-rate s = app->iimExit(cTimeout);
Использование JavaScript в макросах
В iMacros можно присваивать переменным результаты выполнения JavaScript-кода c помощью команды EVAL:
SET JSVAR EVAL(«var JSVAR = 45+5; JSVAR;»)
PHP
iMacros можно запускать с веб-сервера, используя PHP-скрипт. Зачем это может пригодиться? Для пополнения базы данных посредством мониторинга информационных сайтов, генерации онлайн-табло результатов тестирования состояния серверов и так далее. Пример вызова макроса, осуществляющего поиск на странице:
iimInit(«-runner»); // Получаем код макроса и слова для поиска // из адресной строки $imacrosprocess = $iimobject->iimSet («-var_keyword», $_GET[«keyword»]); $imacrosprocess = $iimobject->iimPlay ($_GET[«macro»]); // Выводим отчет о выполнении макроса (удалось // запустить или нет) echo «iimplay=»; echo $imacrosprocess; // и результаты поиска echo «extract attachment_60091″ aria-describedby=»caption-attachment-60091″ style=»width: 642px» >Рис. 4. Окно редактирования макроса
Direct Screen Technology
Если сайт сделан на Flash, Flex или SilverLight, то к его элементам нельзя обратиться стандартными способами (по идентификаторам DOM-разметки). Необходимо использовать координаты объекта на веб-странице:
‘клик по точке с координатами и ввод текста DS CMD=MOVETO X=455 Y=224 CONTENT= текст
С помощью координатной адресации можно даже имитировать drag and drop. Перед записью макроса для Flash-сайта необходимо включить Use Direct Screen Commands в настройках.
Скриншоты
С помощью команды SCREENSHOT TYPE=(PAGE|BROWSER) FOLDER=folder_name FILE=file_name можно сделать скриншот всей страницы, а используя TAG + обращение к элементу + CONTENT=EVENT:SAVE_ELEMENT_SCREENSHOT — отдельной ее части.
Тестирование сайтов
С помощью iMacros можно легко написать программу для мониторинга времени реакции на разные действия пользователя. Пример:
‘Загружаем страницу и записываем в бортовой журнал время на ее загрузку URL GOTO=http://example.com/about STOPWATCH имя и фамилию пользователя в формы и замеряем время, затраченное на отправку данных TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:username CONTENT=Ira TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:usersurname CONTENT=Chernova TAG POS=1 TYPE=BUTTON:SUBMIT FORM=ID:SendInfo ATTR=TXT:SendInfo STOPWATCH >Результаты измерений сохраняются в ImacrosDownloadsperformance_Stopwatch.csv.
Обработка ошибок
По умолчанию в случае возникновения какой-либо ошибки выполнение макроса останавливается. Этого можно избежать, прописав в начале !ERRORIGNORE YES.
Использование прокси-серверов
Для этого чтобы подсоединиться к прокси-серверам перед выполнением макроса или во время его, используй команду proxy:
PROXY ADDRESS=127.0.0.1:8888
Альтернативы
Запись видео
Если ты хочешь запечатлеть лучшие моменты работы iMacros на видео — используй плагин Capture Fox для Mozilla или Screencastify для Chrome.
SRC
В приложении к журналу есть девять шаблонов макросов (с русскоязычными комментами), которые ты сможешь приспособить для решения следующих задач:
- заполнение полей форм из CSV-файлов;
- извлечение данных из таблицы в CSV-файл;
- установка значений в селектах и переключателях (radio buttons);
- сохранение картинок с сайта;
- обработка всплывающих JS-диалогов;
- печать страницы;
- создание скриншотов;
- измерение времени на загрузку отдельных элементов страницы и выполнение сценариев;
- извлечение данных из форм и прочих частей веб-сайта.
Заключение
В этой статье рассмотрены возможности iMacros, позволяющие решать тривиальные проблемы, с которыми может столкнуться любой IT-специалист или просто активный пользователь инета. Всего же инструмент включает в себя более полусотни команд, обозреть которые в формате журнала невозможно. Поэтому, если ты не нашел здесь ничего, что могло бы облегчить твою рутину в Сети, не отчаивайся и загляни в документацию или на форум imacros.net.
Источник: xakep.ru