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

bvbfor

Client
Регистрация
10.04.2016
Сообщения
468
Благодарностей
333
Баллы
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 КБ Просмотры: 4
Последнее редактирование:
  • Спасибо
Реакции: NickR

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