ZennoBrowser - Добавляем свои действия, которых нет в стандартных кубиках. Пример шаблона.

bvbfor

Client
Регистрация
10.04.2016
Сообщения
470
Благодарностей
351
Баллы
63
ZennoBrowser - Добавляем свои действия, которых нет в стандартных кубиках. Пример шаблона.

Пока ещё не все действия с зеннобраузером можно делать с помощью стандартных кубиков.
Но если нужно, можно сделать свой код для изменения некоторых параметров.
Покажу на примере изменения имени профиля и заметок(описания).
Возможно к моменту публикации это уже будет реализовано в стандартных кубиках, но по такому же принципу можно менять и другие параметры.

Начнем.
Всё, что здесь написано, продемонстрировано в видео в конце темы.

Файлы профилей у нас лежат в C:\Users\имяпользователя\AppData\Local\ZennoLab\ZP8\.zp8\
Создадим руками профиль с именем Sample и с заметками Sample Note
Зайдем в вышеуказанную папку и сделаем поиск в файлах по слову Sample
Видим, что это файл SQLite - ProfileManagement.db.
Открываем его с помощью браузера SQLite, видим что нужные нам поля, это id name notes в таблице ProfileInfos
Дальше пишем код для смены значений полей name и notes. Кому затруднительно, можно прибегнуть к помощи ИИ.

Код для смены имени и описания(заметок):
// ВХОДНЫЕ ПАРАМЕТРЫ
// Получаем ID профиля из переменной проекта ZennoPoster
string id = project.Variables["idprof"].Value;
// Устанавливаем новые заметки для профиля
string newNotes = project.Variables["note"].Value;
// Путь к базе данных SQLite с информацией о профилях ZennoPoster
string dbPath = @"C:\Users\bvbfo\AppData\Local\ZennoLab\ZP8\.zp8\ProfileManagement.db";
// Новое имя профиля (email адрес)
string newName = project.Variables["name"].Value;

// Объявляем переменную для подключения к базе данных SQLite
System.Data.SQLite.SQLiteConnection conn = null;
// Объявляем переменную для транзакции базы данных
System.Data.SQLite.SQLiteTransaction tx = null;

try {
    // Создаем новое подключение к базе данных SQLite с указанным путем
    conn = new System.Data.SQLite.SQLiteConnection("Data Source=" + dbPath + ";");
    // Открываем соединение с базой данных
    conn.Open();

    // Создаем команду для установки таймаута ожидания блокировки БД (10 секунд)
    var pragma1 = conn.CreateCommand(); pragma1.CommandText = "PRAGMA busy_timeout=10000"; pragma1.ExecuteNonQuery();
    // Создаем команду для включения проверки внешних ключей в SQLite
    var pragma2 = conn.CreateCommand(); pragma2.CommandText = "PRAGMA foreign_keys=ON";   pragma2.ExecuteNonQuery();

    // Начинаем транзакцию для обеспечения целостности данных
    tx = conn.BeginTransaction();

    // Создаем команду для выполнения SQL запроса
    var cmd = conn.CreateCommand();
    // Привязываем команду к текущей транзакции
    cmd.Transaction = tx;
    // SQL запрос для обновления заметок и имени профиля по ID
    cmd.CommandText = "UPDATE ProfileInfos SET Notes=@notes, Name=@name WHERE Id=@id";
    // Создаем параметр для заметок и добавляем его в команду
    var p1 = cmd.CreateParameter(); p1.ParameterName = "@notes"; p1.Value = (object)newNotes ?? System.DBNull.Value; cmd.Parameters.Add(p1);
    // Создаем параметр для имени профиля и добавляем его в команду
    var p2 = cmd.CreateParameter(); p2.ParameterName = "[USER=98307]@Name[/USER]";  p2.Value = (object)newName  ?? System.DBNull.Value; cmd.Parameters.Add(p2);
    // Создаем параметр для ID профиля и добавляем его в команду
    var p3 = cmd.CreateParameter(); p3.ParameterName = "@id";    p3.Value = id;                                      cmd.Parameters.Add(p3);

    // Выполняем SQL команду обновления данных
    cmd.ExecuteNonQuery();
    // Подтверждаем транзакцию (сохраняем изменения в БД)
    tx.Commit();

    // Создаем команду для принудительной записи WAL файла в основную БД
    var cp = conn.CreateCommand();
    // PRAGMA команда для полной синхронизации WAL (Write-Ahead Logging) с основной БД
    cp.CommandText = "PRAGMA wal_checkpoint(FULL)";
    // Выполняем команду синхронизации
    cp.ExecuteNonQuery();
}
catch (System.Exception ex) {
    // В случае ошибки пытаемся откатить транзакцию
    try { if (tx != null) tx.Rollback(); } catch {}
    // Отправляем сообщение об ошибке в лог ZennoPoster
    project.SendErrorToLog("Ошибка обновления профиля: " + ex.Message, false);
}
finally {
    // В блоке finally гарантированно закрываем соединение с БД
    try { if (conn != null) conn.Close(); } catch {}
    // Освобождаем ресурсы подключения к базе данных
    try { if (conn != null) conn.Dispose(); } catch {}
}

136019

Описание создания шаблона:
Руками создаем профиль Sample с нужными настройками. Копируем id профиля.
Затем создаем кубик для создания профиля с такими же параметрами, добавляем в него id профиля Sample.
Распарсиваем json ответ и кладем значение id нового профиля в переменную idprof.
Запускаем инстанс с idprof

Дальше выполняем задачу - например авторизацию на каком либо сервисе(например на mailru) или делаем какие либо другие действия.

Сохраняем значения для имени профиля и заметок в переменные проекта name и note

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

Видео Пример шаблона.




Шаблон скачать:
 

Вложения

  • 829,6 КБ Просмотры: 19
Последнее редактирование:

nvrskozzy

Client
Регистрация
11.07.2025
Сообщения
178
Благодарностей
15
Баллы
18
Спасибо! очень актуально!
Насоздавал сотни профилей в зб только потом понял что понятия не имею где какой аккаунт. названия у них это рандомные имена, надо было сохранять в бд id профиля и емейл когда регал но уже поздняк, лучше бы хромиум юзал))

Видимо этот скрипт поможет исправить ситуацию!
это конечно тот еще гемор заходить на каждый профиль отдельно проверять на каком логине авторизация, если она не слетела, и менять название, но что делать)

Разрабы, добавьте установку и изменение названий в ZB)
 

Int_Now

Client
Регистрация
23.02.2019
Сообщения
36
Благодарностей
32
Баллы
18
спс, как раз решил создавать
 

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