БАЗА ПО BAS. Начальный гайд для новичков.
автор - @bountydr0p
- Интерфейс
- Профили
- Ресурсы
- Селекторы
- Виды селекторов
- Как выбрать правильный селектор
- Пример нахождения селектора
- Советы по работе с селекторами
- Базы данных
- Создание базы данных
- Создание таблиц и колонок
- Управление данными в базах
- Работа с базами в cкриптах
- Парсинг данных
- Глобальные переменные и ресурсы
- Глобальные vs локальные переменные
- Как задать глобальные переменные
- Пример использования глобальных переменных
- Использование ресурсов
- Работа с циклами
- Полезные ресурсы
Введение
Зачем тебе BAS и что это такое?
BAS (Browser Automation Studio) - по своей сути это обыкновенная программа. BAS не является сверхтяжелым языком программирования и освоить его может каждый, поэтому не пугайтесь, все будет просто.
Говоря просто, вы можете задать порядок действий в специальном многофункциональном конструкторе и этот алгоритм будет выполнятся во встроенном в BAS браузере. Количества модулей хватает для большинства потребностей, кроме того существуют кастомные модули
Самое главное преимущество BAS по моему мнению - возможность создания профилей. Да, прямо как в антидетект браузерах: со своими прокси, куками и отпечатками.
Хочу сразу сказать, что курс расчитан на новичков, но я буду рад, если и опытные найдут что-то новое)
Почему этот курс полезен, ведь в интернете и так полно инфы? Потому что он нацелен именно на крипту. Мы будем учиться работать с базами данных, настраивать профиль и изучать практические примеры нацеленные конкретно на криптоактивности.
Кроме того здесь вы получите структуризованный подход к изучению(вам не нужно метаться с видео на видео) и большое количество доп контента.
1. Интерфейс
Для начала установим непосредственно саму программу. Для этого переходим по ссылке:
BrowserAutomationStudio: Chrome automation solution.
Пока что нас устроит бесплатная версия. Платная нужна для защиты скриптов, в случае если вы собираетесь их продавать.
Начальная страница
После запуска программы мы видим такую картину:
По центру находится главное окно в котором нам доступно 2 действия: "Запись" и "Запуск".
Справа находятся "Ресурсы". Сюда мы будем добавлять различные данные, которое будут использоваться в процессе построения логики.
Углубляемся и нажимаем кнопку "Запись"
Редактор скрипта
Слева мы видим "Редактор скрипта"
Здесь будут располагаться так называемые "кубики", то есть отдельные элементы скрипта. Эти шаги(кубики) выполняются один за другим сверху вниз.
Обратите внимание на 4 кнопки сверху в редакторе скрипта:
Зеленая запускает скрипт и все действия начинают выполняться по порядку сверху вниз.
Желтая выполняет только указанный кубик.
Модули
По центру находятся модули. Из них будет состоять наш скрипт
Помимо представленных модулей также можно создавать свои и находить их в интернете от других разработчиков. К примеру одна из функций модуля "Браузер" открывает сайт по URL.
По центру снизу находится окно с браузером, в котором будут отображаться все действия, выполняемые скриптом.
В самом низу во вкладке "Лог" будет появляться информация по ходу выполнения программы.
Весь необходимый интерфейс посмотрели, переходим к практике
для общего понимания можете глянуть краткий гайд от басера - тык
также рекомендую к ознакомлению эти видосы - ссылка1 ссылка2 ссылка3
ну и конечно же канал маэстро - ссылка
опять же, эти видосы просто для общего понимания. если что-то непонятно - не переживайте и не ломайте голову, все разберем по порядку.
2. Профили
Для создания качественных профилей нам необходимо будет подготовить прокси и юзер агенты.
Прокси - ссылка
Юзер-агенты - ссылка
Создание профиля
Сам профиль по сути является набором данных, которые хранятся в папке. BAS позволяет нам создавать и управлять этими данными.
Поэтому предварительно на вашем пк необходимо создать папку где будут хранится профили. Назовем ее к примеру "Профили", роли не играет, можете назвать как вашей душе угодно.
Чтобы создать профиль нужно выбрать модуль "Работа с профилями"
Далее "Создать или переключиться на постоянный профиль (устарело)"
В 'Путь к папке профиля' вставляем путь к нашей созданной папке и через слэш вбиваем название профиля, опять же как хотите так и называйте, выглядеть должно примерно так:
C:Users\BountyLoh\Downloads\Профиля\NotSybil1
Оставляем оба пункта "true" и нажимаем "Ок"
Можете проверить что все действительно "Ок" и посмотреть папку "Профили", там должна появиться папка "NotSybil1"
Этот путь должен оставаться неизменным
Учтите что новый профиль весит где-то 50мб, а заполненный около 100мб.
рекомендую видосы - ссылка1 ссылка2
Смена отпечатка
Для работы с отпечатками открываем модуль "Смена отпечатка браузера"
В самом верхнем поле находятся теги. В бесплатной версии доступен только Microsoft Windows, Chrome.
Этого вполне достаточно, если у вас до 10-20 профилей. Если же ваша ферма больше, рекомендуется купить ключ FingerprintSwitcher. Он стоит 20$ в месяц
PerfectCanvas. Canvas по сути своей является уникальным рисунком, который создает ваш браузер при входе на сайт. Сайт же может вас спалить по этому рисунку. Чтобы это подделать используется PerfectCanvas.
Подробнее про PerfectCanvas - тык
Пользовательские серверы. Этот пункт используют владельцы сайтов для сбора отпечатков, нас не интересует
Хочу дополнить, что в BAS существуют переменные. Они могут принимать разные типы данных и по этому признаку отличаются. Как вы можете заметить сейчас наше значение сохраниться в переменную 'FINGERPRINT'
Вы можете вызывать эти переменные далее в скрипте.
В переменных появляется FINGERPRINT. Это и есть наш отпечаток, который представляет собой набор данных. Теперь нам нужно его применить
Нажимаем применить в модуле "Смена отпечатка браузера"
Переменные в басе обозначаются символами [[xxx]] как видно на скрине.
подробный урок про переменные - ссылка
более короткий - ссылка
использование переменных - ссылка
Вставляем нашу переменную с отпечатком в самое верхнее поле "Отпечаток"
Добавить шум в данные Canvas - false
Чтобы проверить наш отпечаток откроем сайт Browserscan.net
Для этого вернемся на главный экран и нажмем f2 для того чтобы включить прямое управление браузером
Теперь появилось окно браузера и строка ввода. Вставляем туда ссылку на сайт Browserscan.net
Чекер показал, что есть разница в версиях браузера, а они должны совпадать.
У вас скорее всего то же самое. Версию браузера движка можно узнать нажав на "Помощь" в верхней панели. "О движке".
Для того чтобы они совпадали нужно заменить юзер агент.
Для этого переходим на url chrome://setings и нажимаем "About Chromium"
2) Находим актуальный User Agent
Переходим на сайт Chrome 132.0 | User Agents и выбираем случайный подходящий по версии агент. Копируем его и вставляем в удобное место
Для этого копируем его из переменной FINGERPRINT. Переменные находятся под "кубиками''
Вставляем fingerprint в блокнот и изменяем все юзерагенты на новые, которые мы взяли с сайта. Удобнее всего это делается через поиск по слову "Mozilla".
После того как вы подменили все юзерагенты копируете новый фингерпринт и вставляете в переменную FINGERPRINT. Сохранить изменения.
Доп материалы по отпечаткам - ссылка1 ссылка2
видос по Fingerprintmanager - ссылка
Прокси
Я лично использую прокси с сайта proxys.io. Они одни из самых надежных и анонимных, стоят относительно дешево.
Чтобы сменить прокси переходим в модуль "Браузер" и нажимаем "Прокси"
Прокси - сюда вводим ваш прокси. Справа нажав на вопрос вы можете увидеть доступные форматы.
Далее выставляем следующие настройки:
В режим WebRTC ставим enable если ваши прокси поддерживают UDP. Если не поддерживают - replace.
Лучше поставить ip-api.com в Метод получения информации о IP
С прокси закончили, нажимаем OK
Расширения
Существует также альтернативный способ создания профиля. Отличается он более гибкой настройкой. Мы будем использовать данный метод для того, чтобы разнообразить наш профиль и накатить расширения.
Заходим в модуль "Браузер" и нажимаем "Настройки браузера"
Далее устанавливаем настройки как на скринах:
Далее указываем путь к Zip файлу с расширением.
скачать зип с расширением кошелька вы можете на гитхабе нужного вам кошелька
гитхаб рэбби - ссылка
Аргументы командной строки - тут есть очень много команд, которые нам помогут в более детальной настройке. Можете нажать на вопрос и посмотреть доступные команды.
В конце указываем путь к профилю.
Примерно так должны выглядеть наши кубики. Сначала создание профиля(не обязательно, мы использовали для ознакомления, чтобы знать 2 способа), потом создание+настройка. Этот кубик должен идти до отпечатка и прокси, так как если он будет после, то все настройки сбросятся. Потом отпечаток и последнее - прокси
Теперь можем проверить все что мы сделали.
прокси и отпечаток - нажимаем f2 и пишем browsrescan.net проверяем на наличие ошибок и подмену айпи
Чтобы проверить расширение, кликаем на 3 полоски в углу окна браузера, они доступны только при прямом управлении, то есть после нажатия f2
Далее нажимаем "Расширения" и выбираем доступное. Если пункта "Расширения" нет, то что-то пошло не так и вам нужно проверить правильность пути и сам файл расширения.
После того как вы открыли ваше расширение, нужно скопировать его идентификатор и сохранить в удобном месте. Это понадобится для того, чтобы вызывать расширение в скрипте.
chrome-extension://fglcocpfbhbahhcjllbfdmbnfmpaknbe/popup.html#/unlock
fglcocpfbhbahhcjllbfdmbnfmpaknbe - идентификатор, у вас он возможно другой
Для того чтобы вызывать расширение через модуль открываем модуль "Браузер" и нажимаем "Нажать кнопку расширения". Перед этим необходимо прогрузить любую страницу, чтобы подгрузились все параметры.
Чтобы это сделать нам опять нужен модуль "Браузер" и "Загрузить". Неважно какая страница, к примеру тот же browserscan.net
Дальше по классике вводим сидку в расширение кошелька и все, она сохраняется в профиле, больше вводить ее не нужно.
видосы по расширениям - тык1
Cookies
Этот пункт необязателен, но он упрощает дальнейшую работу.
Мы можем экспортировать файлы cookie с наших антиков, на которых уже выполнен вход в дискорд, твиттер и тд. Импортировав их в BAS, мы сможем легко автоматизировать различные социалки, ну и повысим уровень анонимности, так как наш браузер уже будет тяжело отличить от уникального юзера.
Чтобы это сделать нужно скачать расширение EditThisCookie
Далее переходим на нужный сайт, открываем расширение и нажимаем "Экспортировать". Куки скопированы.
Далее загружаем эти куки в BAS.
Для этого создаем переменную в модуле "Логика скрипта" функцией "Установить переменную"
Называем эту переменную и ниже вставляем куки. Выглядеть это должно примерно как на скрине.
Но проблема в том, что куки которые мы вставили не имеют совместимости с BAS. Поэтому мы должны воспользоваться специальным модулем "CookiesTools".
Этого модуля нет в изначальной комплектации, поэтому мы должны поставить его самостоятельно.
Под постом с этой статьей(можете найти в закрепе) в телеграм канале @bountydr0p будет приложение с архивом, который так и называется, "cookiestools". Вам нужно его скачать
Чтобы установить модуль, нужно выйти из проекта
Нажимаем "Менеджер модулей". Находится он сверху по центру.
Далее "Установить модуль" и находим zip архив с нашим модулем.
Нажимаем "Запись" и возвращаемся в проект
Заходим в модуль "CookiesTools", "Импорт из расширения EditThisCookies"
В обе графы вставляем нашу переменную с куками и нажимаем Ок
После перезагрузки необходимо сначала подгрузить профиль.
Выбираем модуль "Сеть" и "Загрузить Cookies"
Вставляем переменную с куками.
3. Ресурсы
Что такое ресурсы?
Ресурсы в BAS — это компоненты или глобальные переменные, которые можно использовать в любом месте вашего скрипта. Они работают независимо от потоков и позволяют задавать параметры, которые будут доступны во всех частях программы.
Глобальные и локальные переменные
- Глобальные переменные доступны во всем коде и используются в каждом потоке.
- Локальные переменные ограничены конкретной функцией или потоком.
Ресурсы в BAS — это гибридный инструмент, который объединяет свойства глобальных и локальных переменных, а также поддерживает многопоточность.
Создание нового ресурса
Шаг 1: Создание ресурса
2. Справа в поле "Ресурсы" нажимаем "Создать новый ресурс".
3. Укажите название ресурса (например, "Потоки"). В этом случае в данном ресурсе мы будем указывать количество потоков
Шаг 2: Выбор типа ресурса
BAS предлагает несколько типов ресурсов. Рассмотрим основные из них:
1. Строка
Используется для хранения текстовых данных, ссылок или других значений.
2. Число
Используется для работы с целыми числами (например, для задания количества потоков).
3. Генератор строк
Позволяет генерировать случайные значения из заданного списка.
4. Случайное число
5. Список
Содержит набор значений (например, список сайтов или режимов работы).
6. Ресурс из файла
7. Файлы из папки
8. База данных
Хранит структурированные данные в виде таблицы.
Создание базы данных
- Перейдите в раздел "База данных" → "Создать базу".
- Задайте название таблицы (например,
Table_Main
). - Добавьте колонки:
- Сохраните изменения.
Теперь вы можете заносить данные вручную или автоматически через скрипт.
Группировка ресурсов
Если у вас много ресурсов, их можно сгруппировать по вкладкам:
Настройка многопоточности
Чтобы настроить количество потоков
2. Перейдите в настройки потоков (цифра рядом с количеством потоков).
3. Выберите ресурс "Потоки" через F7.
Теперь количество потоков будет регулироваться через созданный ресурс.
Видосы по ресурсам - тык1 тык2
4. Работа с селекторами в BAS
Введение
Селекторы — это ключевой инструмент для автоматизации взаимодействия с веб-элементами. В этой части мы подробно разберем, что такое селекторы, какие виды селекторов существуют, как их использовать и как выбирать правильный селектор для работы на различных сайтах.
4.1. Что такое селектор?
Селектор — это идентификатор элемента на веб-странице. Каждый элемент на сайте, будь то кнопка, текст, изображение или меню, имеет свой уникальный селектор. Селекторы позволяют нам точно указывать, с каким элементом нужно взаимодействовать в автоматизированном скрипте.
Пример:
На сайте PancakeSwap вы можете увидеть:
Все эти элементы имеют свои селекторы, которые позволяют нам взаимодействовать с ними через BAS (Browser Automation Studio). Например, кнопка "Connect Wallet" может иметь селектор button.connect-wallet
, который указывает на элемент с тегом button
и классом connect-wallet
.
Как это работает?
Когда вы открываете веб-страницу, каждый элемент на ней имеет определенное местоположение и атрибуты (например, id
, class
, tag
). Селекторы используют эти атрибуты для идентификации элементов. Например, если вы хотите нажать на кнопку "Connect Wallet", BAS использует селектор, чтобы найти эту кнопку на странице и выполнить действие (например, клик).
Чтобы увидеть селекторы нужно нажать f1(выбрать непрямое управление браузером в BAS). Тогда вы можете заметить, что элементы сайта, на которые вы наводите курсор выделяются красным прямоугольником. Это как раз CSS селектора. они также подписываются снизу слева.
4.2. Виды селекторов
В BAS существует несколько видов селекторов, каждый из которых имеет свои особенности и применяется в зависимости от ситуации. Рассмотрим основные из них:
4.2.1. CSS-селектор
CSS-селектор — это один из самых распространенных видов селекторов. Он основан на атрибутах HTML-элементов, таких как id
, class
, tag
и других. CSS-селекторы используются для точного указания элемента на странице.
В общем наша задача искать максимально долговечные селектора. Тут уже поможет опыт, насмотренность и тд. После нескольких собственных скриптов уже будете по виду селектора определять к чему он относится и сколько протянет. Рекомендую использовать DevTools. Для этого кликаем правой кнопкой мыши и выбираем "Изучить элемент на странице"
DIV.raf-pidor67adsakflm124.slezi-hueshi13fas
Когда использовать CSS-селектор?
видос по css селекторам - тык
4.2.2. Match-селектор
Match-селектор работает по принципу совпадения текста или других атрибутов элемента. Это удобно, когда вам нужно взаимодействовать с элементами, которые имеют уникальный текст или атрибуты.
- Преимущества:
- Простота в использовании.
- Не требует глубокого понимания структуры HTML.
- Идеально подходит для элементов с уникальным текстом (например, кнопки с текстом "Connect Wallet").
- Недостатки:
Connect Wallet
Этот селектор найдет все элементы с текстом "Connect Wallet".
Мы видим что с таким текстом найдено 2 элемента. Если мы хотим нажать только на 1, то дописываем >AT>0.
Таким образом мы перебираем индексы элементов и ищем подходящий. В этом методе может возникнуть проблема, если сработает автоперевод языка, но это случается крайне редко
Когда использовать Match-селектор?
- Когда элемент имеет уникальный текст, который не меняется.
- Когда другие селекторы (CSS, XPath) сложно применить.
4.2.3. XPath-селектор
XPath — это более продвинутый вид селектора, который позволяет точно указывать путь к элементу в структуре HTML-документа. XPath используется, когда нужно работать с элементами, которые находятся в сложной вложенной структуре.
- Преимущества:
- Очень точный.
- Позволяет работать с элементами, которые сложно найти с помощью CSS или Match.
- Подходит для сложных структур с множеством вложенных элементов.
- Недостатки:
Заходим в DevTools и в поиске находим необходимый нам элемент. К примеру нам нужна кнопка "Connect Wallet"
Видим что эта кнопка находится в верхней шапке, то есть сначала обращаемся к тегу nav
Далее пишем button. Практически все кнопки используют этот тег, но лучше проверить.
Найдено 40 элементов. Чтобы тыкнуть именно на "Connect Wallet" прописываем квадратные скобки - []. В них мы указываем что содержится в конкретном элементе.
[contains(.,'Connect Wallet')]
[contains(.,'хуйхуйхуй')] - так выглядит уже привязка к конкретному элементу
Если у вас нашлось больше 1 элемента, то делаете перебором через >AT>0 1 и тд
Когда использовать XPath-селектор?
- Когда элемент находится в сложной вложенной структуре.
- Когда другие селекторы (CSS, Match) не работают.
XPath довольно сложная штука, но как по мне это лучший вариант среди селекторов. С практикой вы приживетесь и будете плавать в коде элемента как рыба в воде и сможете даже в электронном дневнике двойки на пятерки менять, чтобы мама похвалила.
видос по css и xpath селекторам - тык
видос по xpath - тык
4.2.4. Графический селектор
Графический селектор используется, когда другие методы не работают или когда элемент сложно идентифицировать с помощью стандартных селекторов. Этот метод основан на поиске изображения элемента на странице.
- Преимущества:
- Полезен, когда элементы на странице динамически меняются или не имеют четких атрибутов.
- Позволяет взаимодействовать с элементами, которые сложно найти с помощью других селекторов.
- Недостатки:
Пример использования графического селектора:
- Вы выделяете элемент на странице с помощью мыши, и BAS создает графический селектор на основе изображения этого элемента.
Когда использовать графический селектор?
4.3. Как выбрать правильный селектор?
При выборе селектора важно учитывать несколько факторов:
4.3.1. Долговечность
Селектор должен быть максимально стабильным и не зависеть от изменений на странице. Например, использование id
или статичных классов предпочтительнее, чем использование индексов элементов.
- Хороший селектор:
button.connect-wallet
(использует класс). - Плохой селектор:
button:nth-child(2)
(использует индекс, который может измениться).
4.3.2. Точность
Селектор должен точно указывать на нужный элемент, чтобы избежать ошибок в работе скрипта. Если селектор находит несколько элементов, это может привести к неправильным действиям.
- Если на странице несколько кнопок с текстом "Connect Wallet", используйте более точный селектор, например, XPath.
4.3.3. Простота
По возможности выбирайте простые и понятные селекторы, которые легко поддерживать. Сложные селекторы могут быть трудными для понимания и отладки.
4.4. Пример работы с селекторами на сайте PancakeSwap
Давайте рассмотрим пример работы с селекторами на сайте PancakeSwap.
Кнопка "Connect Wallet"
- CSS-селектор:
button.connect-wallet
- Match-селектор:
Connect Wallet
- XPath-селектор:
//button[contains(text(), 'Connect Wallet')]
Элемент для смены сети
- CSS-селектор:
div.network-selector
- Match-селектор:
Switch Network
- XPath-селектор:
//div[contains(text(), 'Switch Network')]
Меню "Trade"
5. Советы по работе с селекторами
- Используйте инструменты разработчика: В браузере есть встроенные инструменты разработчика (DevTools), которые позволяют изучать структуру HTML и находить селекторы. Нажмите правой кнопкой мыши на элемент и выберите "Изучить элемент".
- Избегайте динамических селекторов: Если селектор содержит динамические значения (например, случайные числа или буквы), старайтесь избегать их использования. Вместо этого ищите статичные атрибуты, такие как
id
или классы. - Тестируйте селекторы: Перед использованием селектора в скрипте обязательно протестируйте его, чтобы убедиться, что он точно указывает на нужный элемент.
видос от маэстро по селекторам - тык
5. Работа с базами данных в BAS
5.1. Введение в базы данных
База данных — это структурированное хранилище информации, которое позволяет хранить, управлять и извлекать данные. В контексте скриптов базы данных используются для хранения важной информации, такой как аккаунты, приватные ключи, прокси, значения газа и многое другое.
5.1.1. Создание базы данных
Для создания базы данных в вашем проекте необходимо:
3. Выбрать режим создания: текстовый или конструктор.
4. Выбираем Режим конструктора
5.2. Создание таблиц и колонок
5.2.1. Создание таблицы
Таблицы в базе данных используются для хранения данных определённого типа. Например, можно создать таблицу для хранения аккаунтов, где каждая строка будет содержать информацию о кошельке, приватном ключе, профиле и прокси.
- Нажмите на кнопку "Добавить таблицу".
- Укажите название таблицы, например, "Аккаунты".
- Добавьте описание таблицы (опционально).
5.2.2. Добавление колонок
Колонки в таблице определяют, какие данные будут храниться.
Например, для таблицы аккаунтов можно добавить следующие колонки:
- Кошелек (тип данных: string)
- Приватный ключ (тип данных: string)
- Профиль (тип данных: string)
- Прокси (тип данных: string)
- Rabby Wallet (тип данных: bool)
- Metamask (тип данных: bool)
- Discord (тип данных: bool)
- Twitter (тип данных: bool)
ну и так далее, смотря что вам конкретно нужно
- String — строка, используется для текстовых данных.
- Int — целое число, используется для числовых значений.
- Date — дата, используется для хранения временных меток.
- Bool — булевый тип, используется для хранения значений true/false.
после создания все сохраняем и перезапускаем бас
5.3. Управление данными в таблицах
Далее нажимаем "база" и заходим в "менеджер данных"
вы должны увидеть примерно такую картину
5.3.1. Добавление записей
Чтобы добавить запись в таблицу:
- Нажмите на кнопку "Добавить". (синие три полоски внизу)
- Заполните поля в открывшемся окне.
- Нажмите "Сохранить".
5.3.2. Редактирование записей
- Выберите запись, которую хотите изменить.
- Нажмите на иконку карандаша.
- Внесите изменения и нажмите "ОК".
5.3.3. Удаление записей
5.3.4. Группировка записей
Группировка позволяет объединять записи по определённым критериям. Например, можно создать группы для разных типов аккаунтов:
- Нажмите на кнопку "Добавить группу".
- Укажите название группы, например, "Группа 1".
- Переместите записи в нужную группу.
5.3.5. Фильтрация записей
Фильтрация позволяет отображать только те записи, которые соответствуют определённым критериям. Например, можно отфильтровать записи, где поле "Прокси" не пустое:
5.4. Работа с базой данных в скриптах
5.4.1. Вызов данных из базы
Для использования данных из базы в скрипте:
- Создайте ресурс базы данных. (про это расписывать не буду, вы уже умные, прошлый урок надеюсь видели)
- Выберите таблицу, с которой будете работать. Это делается через редактирование ресурса.
- При записи скрипта можете выбрать отдельные группы, если у вас разбиты аккаунты
- Далее создаем переменную, и выбираем ресурс "База данных". эта переменная берет в себя текущую строку из бд. можете зайти и посмотреть что в этой переменной, чтобы удостовериться
5.5 Парсинг данных
Для извлечения данных из строки базы данных используйте модуль "Строка" и функцию "Парсить CSV строку". Например, можно извлечь публичный ключ и приватный ключ из строки базы данных.
в строке список разделителей оставляем только ":", это стандартный разделитель в нашей базе
Далее в строку "переменные, в которые сохранять результат" придумываем название переменных, например wallet, privatekey, rafgandon и тд. наша задача через запятую без пробелов записать все переменные, в которые будут сохраняться столбцы из базы данных. можете открыть переменную с базой чтобы посмотреть порядок данных в строке. каждый отдельный элемент отделен ":"
ссылку на профиль запишем как "_" так как мы потом ее обновим и запишем по другому. все тру и фолз тоже пропускаем, то есть ставим _
последний пункт - id в базе, он очень важен, его тоже отправляем в какую-нибудь переменную, например "bazaID"
Далее, чтобы использовать данные из бд, к примеру приватники для рэбби, нам нужно определить профиль с которым мы работаем
создаем переменную в которой будет храниться путь к профилю. пока оставляем и не заполняем значение, назовем к примеру "profilepath"
далее через модуль "работа с ресурсами" и через расположение ресурса сохраняем нашу папку с профилями в новую переменную. назовем ее "profilefolderpath". тоже оставляем пустым
кстати говоря я раньше баловался с названиями переменных, называл их всякого рода юмористическими прозвищами, но потом я очень сильно жалел, что недалекого ума у мамы вышел. поэтому вам советую все прописывать досконально и чтобы было потом интуитивно понятно
перезапускаем софт и не забываем заполнить ресурсы
кубик с папкой с профилями перемещаем выше кубика с профилями
далее заходим в переменную с профилями и в "значение переменной" вставляем нашу переменную с папкой с профилями и добавляем /wallet . это тот самый кошелек, который мы распарсили из базы
далее идут кубики создания и настройки профиля, которые мы делали в прошлых уроках.
Открываем кубик "Настройки браузера" и внизу в разделе профиль меняем путь к папке профиля на нашу переменную "profilepath", далее запускаем этот кубик.
Фингерпринт
Далее чтобы не вызывать постоянно новый отпечаток в модуле "файловая система" заходим в "информация о папке". там в имя файла вставляем переменную profilepath и через / добавяем fingerprint.json то есть должно получится так [[PROFILEPATH]]/fingerprint.json
В остальных строках кроме "существование файла" все удаляем и пишем "_", как мы это делали ранее для пропуска
в существование файла напишем 'fpexist' к примеру
далее нам нужно добавить логику, чтобы когда бас не обнаруживал фингерпринт, он создавал новый.
для этого создаем if и пишем перед переменной fpexist восклицательный знак. то есть если нет отпечатка, то создаем и принимаем новый
под этот if переносим действия с получением и применением отпечатка
Прокси
теперь берем прокси из базы данных. Для этого заходим в наш кубик "прокси"
там удаляем значение прокси и вставляем переменную proxy, которые мы парсили из бд. лучше используйте прокси одного типа, так как иначе я вам только удачи могу пожелать
Приватник
автоматизируем регистрацию кошелька.
запускаем расширение rabby, но до этого подгружаем любую страницу, как мы это делали до этого.
Создаем функцию и называем ее rabbywalletprivatekey
далее при помощи наших знаний о селекторах прокликиваем все кнопки, next, get started, import private key. для этого выбираем непрямое управление или нажимаем F1. далее наводимся на нужный объект, кликаем и в появившемся меню выбираем кликнуть по элементу. тут уже либо оставляем, либо используем другой вид селектора, это уже было в предыдущих уроках.
далее нам нужно задать пароль. тут вы уже можете сделать как хотите. если у вас разные пароли к каждому кошельку, то добавляете столбец в базу данных(потом через менеджер данных добавляете в столбец данные). если хотите сделать один для всех, то создаете ресурс со строкой. вариантов может быть много. я например не заморачиваюсь и беру из глобальной переменной, то есть ресурса. если вы хотите заморочиться, то можете расширить базу, но тогда нужно будет отредактировать кубик с парсингом.
далее выбираем модуль строка, функцию ввод текста, выбираем при помощи селекторов куда вводить. в поле текст для ввода берем нашу переменную с паролем. интервал в миллисекундах можно указать 0. тоже самое делаем с "Password confirm"
По аналогии вводим приватник, только теперь берем переменную, которую мы спарсили из бд
далее нам нужно вызвать эту функцию в скрипте. она вызывается после того как мы загружаем расширение.
логика скрипта -> вызов функции -> rabbywalletprivatekey
следующий момент это проверка на то, просит ли кошелек ввести пароль при повторном входе. если просит, то вводим пароль, если нет, то будет вызываться функция с приватником
для этого нажимаем правой кнопкой мыши по полю вводу пароля и выбираем "проверить существование"
селектор выглядит примерно так >CSS> #password
далее добавляем >AT>0 если не знаете почему, то посмотрите урок с селекторами
нажимаем галку "проверять, виден ли элемент на экране"
сохраняем в переменную passexists
далее через модуль "логика скрипта" и функцию If создаем условие
в выражение вставляем passexists и добавляем блок else
под else перемещаем кубик с вызовом функции rabbywalletprivatekey
под if копируем селектор, который мы проверяли на существование и вводом текста вставляем пароль. либо из распарсенной переменной из бд(если вы делали такой столбец) либо из ресурса(если вы не паритесь)
ну и нажимаем unlock, это тоже оставляем под if
далее в поиске ищем действие "переключиться на вкладку" и переходим на вкладку 0 и можете так же через "закрыть вкладку" закрыть вкладку с расширением
4.3. Обновление записей
Чтобы обновить запись в базе данных:
- Используйте модуль "База данных".
- Выберите действие "Изменить одну запись".
- Укажите ID записи и новое значение для обновления.
5. Дополнительные возможности работы с базами данных
5.1. Экспорт и импорт данных
Базы данных позволяют экспортировать и импортировать данные в различных форматах, таких как Excel, CSV и SQL. Это полезно для создания резервных копий или переноса данных между проектами.
5.2. Использование удаленных баз данных
Для работы с большими объемами данных (более 10 тысяч записей) рекомендуется использовать удаленные базы данных, такие как MySQL или PostgreSQL. Они обеспечивают более высокую производительность и гибкость в управлении данными.
5.3. Оптимизация запросов
Для повышения производительности работы с базой данных важно оптимизировать запросы. Используйте индексы для ускорения поиска и избегайте сложных запросов, которые могут замедлить работу базы.
6. Советы и рекомендации
6.1. Регулярное резервное копирование
Регулярно создавайте резервные копии базы данных, чтобы избежать потери данных в случае сбоев.
6.2. Использование уникальных идентификаторов
Для каждой записи в базе данных используйте уникальные идентификаторы (ID). Это позволит легко находить и обновлять записи.
6.3. Оптимизация структуры базы данных
Планируйте структуру базы данных заранее, чтобы избежать необходимости внесения изменений в будущем. Используйте нормализацию данных для уменьшения избыточности.
Видос по базам данных - тык
6. Глобальные переменные и ресурсы в BAS
1. Что такое глобальные переменные?
Глобальные переменные — это переменные, которые доступны во всех потоках вашего скрипта. Они инициализируются один раз и могут быть использованы в любом месте программы. Это особенно полезно, когда вам нужно сохранить какое-то значение, которое будет использоваться в разных частях скрипта.
2. Глобальные переменные vs локальные переменные
- Глобальные переменные доступны во всех потоках и функциях скрипта. Они инициализируются один раз, и их значение сохраняется на протяжении всего времени выполнения скрипта.
- Локальные переменные доступны только внутри конкретной функции или потока, в котором они были созданы. Остальные функции и потоки о них не знают.
3. Как задать глобальные переменные?
Есть два способа задать глобальные переменные:
- Через логику скрипта: Вы можете инициализировать глобальную переменную в начале скрипта, используя модуль "Логика скрипта" и действие "Установить глобальную переменную".
- Через ресурсы: Ресурсы — это более сложный тип глобальных переменных, которые можно использовать в качестве гибридных переменных.
4. Пример использования глобальных переменных
Создадим функцию GasChecker. Она будет отслеживать значение газа и приостанавливать скрипт, когда значения выше установленных
Начинаем скрипт с загрузки страницы https://etherscan.io/gastracker
Нажимаем на восклицательный знак в треугольнике в правой части кубика. Таким образом мы заворачиваем его в игнор ошибок. Это делается для того, чтобы если сайт не успел полностью прогрузиться за 60 секунд, то никаких ошибок не выдавало
Далее выделяем блок с нужным нам значением gwei и нажимаем "получить текст"
В переменную сохраняется "x gwei", то есть число и слово, а нам нужно оставить только число. Для того чтобы это сделать используем модуль "Регулярные выражения" и "Заменить строку"
В регулярном выражении выбираем [^0-9]+
нажимаем ок, переменную можем указать ту же, чтобы она просто перезаписалась
далее меняем переменную, чтобы она стала числового типа
Заходим в модуль "Строка" и выбираем "В число"
Далее создаем еще одну таблицу в базе данных, называем ее gaschecker, делаем там один столбец
Заходим в модуль База данных и нажимаем Изменить одну запись
Но сначала нам нужно получить эту запись
Опять заходим в модуль База данных и выбираем Получить записи по критерию
Указываем уже другую переменную, например GASROWS
Далее в модуле Список выбираем Получить элемент и пересохраняем GASROWS в GASROWS, индекс 0
Далее нам нужно распарсить айди
строка - GASROWS, оставляем только :
_,BDID
теперь в BDID есть значение этой переменной
Далее спокойно обновляем значение в базе
База данных - Изменить одну запись
в значение с газом вставляем первую переменную, не ту которая GASROWS, предположим вы ее назвали просто GAS
тогда он будет работать бесконечно и постоянно обновлять значение газа
Все кубики подставляем под while
В конце вставляем Ожидание - спать
можем указать 60000 миллисекунд
Далее эту функцию нам нужно вызывать правильным образом, чтобы она не мешала работе основного скрипта
Заходим в функцию OnApplicationStart и используем модуль Асинхронный вызов функции - Вызов функции асинхронно
У нас есть функция GasChecker, которая получает информацию о газе каждые 60 секунд. Мы хотим, чтобы это значение можно было программировать внутри базы данных. Для этого мы можем использовать глобальную переменную.
- Перейдите в логику скрипта и найдите действие "Установить глобальную переменную".
- Назовите переменную, например, TIMERGASCHECKING, и задайте значение в секундах (например, 300 секунд).
- Теперь эта переменная будет доступна во всех потоках скрипта.
5. Использование ресурсов
Ресурсы — это еще один способ задать глобальные переменные. Они более гибкие и могут быть использованы для более сложных задач.
- Создайте новый ресурс, например, TIMERGASCHECKING, и задайте значение 300 секунд.
- Теперь этот ресурс можно использовать в скрипте, как глобальную переменную.
Для работы с задержками можно использовать глобальные переменные или ресурсы. Например, если вам нужно задать случайную задержку от 15 до 60 секунд, вы можете создать ресурс с типом "случайное число" и задать диапазон значений.
- Создайте ресурс с именем
задержка случайных действий
и выберите тип "случайное число". - Задайте минимальное и максимальное значение (например, от 15 до 60 секунд).
- Теперь этот ресурс можно использовать в скрипте для задания случайных задержек.
Предположим, мы хотим загружать сайт только тогда, когда значение газа соответствует нашему желаемому значению. Для этого мы можем использовать ресурс желаемый газ
.
- Создайте ресурс
желаемый газ
и задайте значение, например, 5. - В скрипте добавьте условие: если текущее значение газа меньше или равно
желаемый газ
, то загружайте сайт. - Таким образом, сайт будет загружаться только при подходящем значении газа. Реализовать это можно через логику скрипта, не буду вдаваться в подробности, это не так сложно
Эмуляция бездействия
Для того чтобы сделать действия в скрипте более "человекоподобными", можно использовать эмуляцию бездействия. Это позволяет задать случайные задержки между действиями, например, скроллинг сайта или клики.
- Перейдите в модуль "Эмуляция бездействия".
- Задайте время эмуляции, используя глобальные переменные или ресурсы.
- Например, можно задать случайное время эмуляции от 15 до 60 секунд.
7. Работа с циклами в BAS
Добро пожаловать на урок, посвящённый циклам! Сегодня мы разберём, что такое циклы, для чего они нужны и какие их виды существуют. В BAS существует 3 типа циклов.
остальные уроки найдете тут
Что такое циклы?
Цикл — это заранее подготовленное последовательность действий, которая выполняется определённое количество раз. Циклы используются в логике скриптов, чтобы автоматизировать повторяющиеся операции. Например, если вам нужно несколько раз выполнить обмен одной монеты на другую (скажем, 5 раз), для этого как раз и применяются циклы.
В нашем базовом наборе есть три основных вида циклов:
- While — цикл с условием.
- For — цикл с заданным количеством повторений.
- Foreach — цикл для последовательного перебора элементов.
Давайте разберём каждый из них подробно.
Виды циклов и их применение
1. Цикл for
Описание
Цикл for используется, когда нужно выполнить операцию заданное количество раз. Он работает с верхней и нижней границами:
- Верхняя граница — начальное значение (от какого числа начинаем).
- Нижняя граница — конечное значение (до какого числа выполняем).
Пример
Предположим, мы хотим, чтобы цикл работал от 1 до 100 повторений:
- Устанавливаем верхнюю границу = 1.
- Устанавливаем нижнюю границу = 100.
- Цикл выполнит операцию 100 раз.
Практика
- Создаём функцию CycleFunction (название может быть любым).
- Внутри функции добавляем цикл for с границами от 1 до 100.
- Запускаем скрипт и видим в логе, как счётчик доходит до 100, после чего цикл завершается.
Особенности
- Переменная, которая хранит текущее значение (например, 1, 2, 3... 100), называется Cycle_Index.
- Чтобы использовать значения внутри цикла, обращайтесь к CycleIndex.
Применение
Цикл for подходит для задач вроде:
- Обмена токенов (свапалок).
- Фарминга.
- Любых активностей, где нужно повторить действие фиксированное число раз.
2. Цикл while
Описание
Цикл while работает на основе условия. Он выполняется, пока условие истинно. Если условие становится ложным, цикл завершается.
Пример 1: Бесконечный цикл
- Устанавливаем условие true.
- Цикл будет работать бесконечно, пока его не прервёт внешнее условие или событие.
- Используется, когда нужно что-то выполнять без остановки (например, получать данные с задержками).
Пример 2: Условный цикл
Предположим, у нас есть значение газа (gas), которое обновляется в базе данных. Мы хотим, чтобы цикл работал, пока gas >= 10:
- Пока условие выполняется (gas >= 10), цикл активен, и мы ничего не делаем.
- Как только gas становится меньше 10 (например, 9), цикл завершается, и начинается основная работа.
Практика
- Создаём функцию cycle_function.
- Добавляем блок для получения значения газа из базы (таблица gaschecker):
- Настраиваем цикл while с условием gas >= 10:
- Запускаем скрипт:
Применение
- Ожидание определённых условий (например, нужного значения газа).
- Бесконечные операции с возможностью прерывания.
3. Цикл foreach
Описание
Цикл foreach используется для последовательного перебора элементов в списке. Он не требует числовых границ, а работает с массивом данных (например, списком сайтов или протоколов).
Пример
Допустим, у нас есть список сайтов:
Мы хотим последовательно зайти на каждый сайт.
Практика
2. Добавляем цикл foreach и указываем переменную site_list.
4. Добавляем задержку (например, 5 секунд) между загрузками.
Особенности
Применение
Практическое применение циклов: свап
Теперь давайте применим цикл for для выполнения нескольких операций обмена (свапов) на примере обмена BNB на USDT через 1inch.
Задача
- Поменять BNB на USDT 2 раза.
- Использовать случайные суммы в диапазоне (например, 0.035–1.86 долларов).
Шаги
- Создаём функцию swap:
- Загружаем сайт:
- Указываем ссылку на 1inch с уже выбранной парой BNB → USDT. ссылка должна выглядеть именно так - https://app.1inch.io/#/56/simple/swap/56:BNB/56:USDT
- Генерируем случайную сумму:
- Вводим сумму:
- Выполняем обмен:
- Ждём полной загрузки страницы.
- Оборачиваем в «Игнор ошибок», чтобы избежать сбоев.
- Нажимаем кнопку «Swap» (селектор: button[match="swap"]).
- Подтверждаем транзакцию:
4. Повторяем операцию через цикл for:
Результат
Полезные ресурсы
Ютуб курсы и качественные каналы:
YouTube плейлист уроки BAS, чекайте сам канал тоже
YouTube канал Скрипты и боты для BAS
Bitcointalk русскоязычный раздел BAS
Pavel Duglas Telegram канал - в предсталении не нуждается, легенда
Automation Empire Telegram группа - чат дугласа, большой актив, смело можете задавать вопросы
BAS English Telegram чат - англоязычный чат дугласа. тоже большой актив
Baser - выкладывает готовые скрипты, по которым вы можете учиться
Также есть куча слитых курсов тут, но для доступа нужно купить премиум подписку, она стоит 850 рублей. сумма не большая, но все равно DYOR, я не проверял но выглядит нормально. извиняйте чьи курсы там есть.
бизнес и ничего личного.