Сохранение профиля с проверкой размеров и наличия куки

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
В шаблоне нагуливания профилей у меня возникло нестабильное место , а именно проблема сохранения профиля после нагуливания.
После прогона 300 шт. профилей по второму кругу около 100 шт. были меньшего размера, а некоторые оказались вообще пустые, только данные профиля. пару штук отказались загружаться на третий круг.
Сохранял кубиком в зенке. Ну пошерстил статьи конкурсные, взял код оттуда с контролем размера нового профиля на C#. результат тот же. ошибки сохранения , потери файлов.
Думал, думал.... решил пойти немного другим путем. Вместо контроля размера файла профиля , я решил контролировать все файлы из которого состоит профиль.
Если какой файл теряется при записи или становиться меньше размером , то он берется из старого профиля. Вот тут есть нюанс . например куки и супер куки нормально выросли, а хранилище слетело в ноль.
У нас хранилище восстановиться из старого профиля, а куки и супер куки будут свежими..... вот незнаю правильно это или нет ? теоретически при следующей прогонке профиля все должно разом обновиться....
кто что думает ?
ну и сам код. покритикуйте , посоветуйте что можно улучшить ?

C#:
string profilePath = @"C:\1\test_1.zpprofile" ;    // задаем имя сохраняемого файла
// Переменные проекта, которые нужно сохранить
var saveVars = new[] { "var1", "var2" };

if (File.Exists(profilePath))    {
    string profilePathAlt = profilePath.Replace(".zpprofile", "_ForCheck.zpprofile");                        // формируем путь к копии профиля
    project.Profile.Save(profilePathAlt, true, true, true, true, true, true, true, true, true, saveVars);      // сохраняем копию профиля
    /////////// разархивируем оба профиля  ///////////
    string Dir_Dest = profilePath    +"_DIR" ;                                                                // формируем путь директории для разархивирования для старого профиля
    string Dir_Altr    = profilePathAlt +"_DIR" ;                                                                // формируем путь директории для разархивирования для нового  профиля
    if (Directory.Exists(Dir_Dest))   {   Directory.Delete(Dir_Dest, true);  }                                // удаляем директории если вдруг они существуют
    if (Directory.Exists(Dir_Altr))   {   Directory.Delete(Dir_Altr, true);  }
    ZipFile.ExtractToDirectory(profilePath, Dir_Dest);                                                         // Извлекаем содержимое архива старого профиля
    ZipFile.ExtractToDirectory(profilePathAlt, Dir_Altr);                                                     // Извлекаем содержимое архива старого профиля
    //--------------------------------------------//
    ///////// проверяем наличие файлов , отсутсвующие файлы берем из старого профиля, если они там есть //////////
    string browserprofiledata_file_Dest = Dir_Dest+@"\browserprofiledata.zpdata" ;
    string browserprofiledata_file_Altr = Dir_Altr+@"\browserprofiledata.zpdata" ;
    string profileaudio_file_Dest = Dir_Dest+@"\profileaudio.zpaudio" ;
    string profileaudio_file_Altr = Dir_Altr+@"\profileaudio.zpaudio" ;
    string profilecanvas_file_Dest = Dir_Dest+@"\profilecanvas.zpcanvas" ;
    string profilecanvas_file_Altr = Dir_Altr+@"\profilecanvas.zpcanvas" ;
    string profiledata_file_Dest = Dir_Dest+@"\profiledata.zpdata" ;
    string profiledata_file_Altr = Dir_Altr+@"\profiledata.zpdata" ;
    string profileextra_file_Dest = Dir_Dest+@"\profileextra.zpextra" ;
    string profileextra_file_Altr = Dir_Altr+@"\profileextra.zpextra" ;
    string profileplugins_file_Dest = Dir_Dest+@"\profileplugins.zpplugin" ;
    string profileplugins_file_Altr = Dir_Altr+@"\profileplugins.zpplugin" ;
    string profileproxy_file_Dest = Dir_Dest+@"\profileproxy.zpproxy" ;
    string profileproxy_file_Altr = Dir_Altr+@"\profileproxy.zpproxy" ;
    string variables_file_Dest = Dir_Dest+@"\variables.zpdata" ;
    string variables_file_Altr = Dir_Altr+@"\variables.zpdata" ;
    string profilecookie_file_Dest = Dir_Dest+@"\profilecookie.zpcookie" ;
    string profilecookie_file_Altr = Dir_Altr+@"\profilecookie.zpcookie" ;
    string profilestorage_file_Dest = Dir_Dest+@"\profilestorage.zpstorage" ;
    string profilestorage_file_Altr = Dir_Altr+@"\profilestorage.zpstorage" ;
    string profilesupercookie_file_Dest = Dir_Dest+@"\profilesupercookie.zpcookie" ;
    string profilesupercookie_file_Altr = Dir_Altr+@"\profilesupercookie.zpcookie" ;

    try { if ( ! File.Exists(browserprofiledata_file_Altr))       {      File.Copy(browserprofiledata_file_Dest , browserprofiledata_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + browserprofiledata_file_Dest,true);}                           
    try { if ( ! File.Exists(profileaudio_file_Altr))           {      File.Copy(profileaudio_file_Dest , profileaudio_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileaudio_file_Dest,true);}                           
    try { if ( ! File.Exists(profilecanvas_file_Altr))           {      File.Copy(profilecanvas_file_Dest , profilecanvas_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilecanvas_file_Dest,true);}                           
    try { if ( ! File.Exists(profiledata_file_Altr))               {      File.Copy(profiledata_file_Dest , profiledata_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profiledata_file_Dest,true);}                           
    try { if ( ! File.Exists(profileextra_file_Altr))           {      File.Copy(profileextra_file_Dest , profileextra_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileextra_file_Dest,true);}                           
    try { if ( ! File.Exists(profileplugins_file_Altr))           {      File.Copy(profileplugins_file_Dest , profileplugins_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileplugins_file_Dest,true);}                           
    try { if ( ! File.Exists(profileproxy_file_Altr))           {      File.Copy(profileproxy_file_Dest , profileproxy_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profileproxy_file_Dest,true);}                           
    try { if ( ! File.Exists(variables_file_Altr))               {      File.Copy(variables_file_Dest , variables_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + variables_file_Dest,true);}                           
    try { if ( ! File.Exists(profilestorage_file_Altr))           {      File.Copy(profilestorage_file_Dest , profilestorage_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilestorage_file_Dest,true);}                           
    try { if ( ! File.Exists(profilesupercookie_file_Altr))       {      File.Copy(profilesupercookie_file_Dest , profilesupercookie_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilesupercookie_file_Dest,true);}                           
    try { if ( ! File.Exists(profilecookie_file_Altr))           {      File.Copy(profilecookie_file_Dest , profilecookie_file_Altr , true );  }    } catch {project.SendInfoToLog("не найден файл в старом профиле - " + profilecookie_file_Dest,true);}                           
    //--------------------------------------------//
    ///////// проверяем увеличение размера файлов  //////////
    var infoOld = new FileInfo(profilecookie_file_Dest);                                                                                                // куки
    var infoNew = new FileInfo(profilecookie_file_Altr);
    if (infoNew.Length < infoOld.Length)     {   try {    File.Copy(profilecookie_file_Dest , profilecookie_file_Altr , true ); } catch{}     }            // при уменьшении копируем из старого профиля
    infoOld = new FileInfo(profilesupercookie_file_Dest);                                                                                                // супер куки
    infoNew = new FileInfo(profilesupercookie_file_Altr);
    if (infoNew.Length < infoOld.Length)     {   try {    File.Copy(profilesupercookie_file_Dest , profilesupercookie_file_Altr , true ); } catch{}     }    // при уменьшении копируем из старого профиля
    infoOld = new FileInfo(profilestorage_file_Dest);                                                                                                    // хранилище
    infoNew = new FileInfo(profilestorage_file_Altr);
    if (infoNew.Length < infoOld.Length)     {   try {    File.Copy(profilestorage_file_Dest , profilestorage_file_Altr , true ); } catch{}     }            // при уменьшении копируем из старого профиля
    ///////// архивируем получившийся профиль в архив  //////////
     try {
          File.Delete(profilePath);
        ZipFile.CreateFromDirectory(Dir_Altr, profilePath);
    } catch{project.SendInfoToLog("не получилось сделать архив профиля - " + profilePath,true);}

        //--------------------------------------------//
    ///////// чистим все временные файлы и директории  //////////
    try {
        Directory.Delete(Dir_Dest, true);
        Directory.Delete(Dir_Altr, true);
        File.Delete(profilePathAlt);
    } catch{project.SendInfoToLog("ошибка при удалении временных файлов " + profilePathAlt,true);}
    //--------------------------------------------//
    
}    else    {        project.Profile.Save(profilePath, true, true, true, true, true, true, true, true, true, saveVars);    }
 

lexadze

Client
Регистрация
02.07.2018
Сообщения
28
Благодарностей
8
Баллы
3
У меня такая же проблема при пересохранении профиля несколько раз пропадают некоторые значения, после чего получаю бан на сайте. Возможно это баг? Пусть посмотрит администрация форума.
 
  • Спасибо
Реакции: 606

Juniorcpa

Client
Регистрация
27.05.2014
Сообщения
2 031
Благодарностей
1 286
Баллы
113
У меня такая же проблема при пересохранении профиля несколько раз пропадают некоторые значения, после чего получаю бан на сайте. Возможно это баг? Пусть посмотрит администрация форума.
а если дефолтные профили пересохранять, они могут менять формат файла, меньше весить например, сталкивались?
 

aeremx

Client
Регистрация
19.09.2019
Сообщения
27
Благодарностей
8
Баллы
3
Да с профилями что-то не то, у меня потерлись вчера из-за вложенного проекта в котором стоял другой браузер https://zennolab.com/discussion/threads/perezagruzka-profilja-vo-vlozhennom-proekte.65901/#post-463169
Стерлось все ;-)
Но и без этого почему-то порой уменьшается размер профиля иногда, причину точную пока не понял. Но с этим надо что-то делать, полностью поддерживаю!
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113
Профили хрома и FF - несовместимы!
 
  • Спасибо
Реакции: Rain и Astraport

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Чтобы код работал в стартпосте не хватает инфы:
Добавьте в GAC: System.IO.Compression.FileSystem
В using'и: using System.IO.Compression;
 
  • Спасибо
Реакции: Phoenix78

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
там еще дорабатывать надо. я в многопотоке ставил и профили могли путаться. нужно лок пилить. но мне щас некогда этим заниматься
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
там еще дорабатывать надо. я в многопотоке ставил и профили могли путаться. нужно лок пилить. но мне щас некогда этим заниматься
Есть какие-то апдейты? В последних версиях зенки фиксили плохое сохранение профиля, вот и думаю использовать код из стартпосчта, или уже не особо он нужен?
П.С. Просьба дать добро на переименование модератором топика в что-то типа:
Правильное сохранение профиля с проверкой размеров и наличия куки
А то он сейчас нифига не гуглится через поиск по форуму из-за неинформативного Title. Если бы не помнил кто автор статьи, то и не нашел бы.
 
Последнее редактирование:
  • Спасибо
Реакции: 606

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 924
Благодарностей
1 123
Баллы
113
Есть какие-то апдейты? В последних версиях зенки фиксили плохое сохранение профиля, вот и думаю использовать код из стартпосчта, или уже не особо он нужен?
П.С. Просьба дать добро на переименование модератором топика в что-то типа:
Правильное сохранение профиля с проверкой размеров и наличия куки
А то он сейчас нифига не гуглится через поиск по форуму из-за неинформативного Title. Если бы не помнил кто автор статьи, то и не нашел бы.
Помоему сейчас нормально сэйвит все на последней версии
 
  • Спасибо
Реакции: Nike59, Sergodjan и orka13

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113
П.С. Просьба дать добро на переименование модератором топика в что-то типа:
Правильное сохранение профиля с проверкой размеров и наличия куки
Переименовал.
Помоему сейчас нормально сэйвит все на последней версии
В ручном сохранении в окне профиля, есть проблема.
В последних версиях зенки фиксили плохое сохранение профиля, вот и думаю использовать код из стартпосчта, или уже не особо он нужен?
Проверьте, сравните, на всякий. Лучше поискать сомнительные моменты сейчас, чем стопорнуться из-за мелочи потом.
 
  • Спасибо
Реакции: Valandersi и orka13

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 924
Благодарностей
1 123
Баллы
113
Переименовал.

В ручном сохранении в окне профиля, есть проблема.

Проверьте, сравните, на всякий. Лучше поискать сомнительные моменты сейчас, чем стопорнуться из-за мелочи потом.
А какая ещё проблема осталась?
 

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