[Халява] Библиотека ProfileActions - расширенная версия стандартных профилей (*.zpprofile)

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Расширенный вариант работы с профилями в ZennoPoster. Возможность сохранять не только информацию о профиле в *.zpprofile, но и заголовки инстанса, устанавливаемые методом instance.SetHeader.

Библиотека сделана для исправления появившейся в 5.10.3.1 версии баги, из-за которой перезаписываются некоторые данные при сохранении профиля (пруф баги). Скорее всего похожие проблемы могли быть и на других версиях, но тому нет точного подтверждения.

Версия v2.0: http://zennolab.com/discussion/threads/xaljava-biblioteka-profileactions-rasshirennaja-versija-standartnyx-profilej-zpprofile.34908/#post-261645 - теперь не нужно думать о потоках и работе в многопотоке. Библиотека и C# сами разруливают это, теперь работа с библиотекой стала на порядок проще и логичнее.



Установка

Т.к. пути и версии библиотеки будут периодически меняться - вот ссылка на репозиторий с исходным кодом: https://github.com/lord-alfred/ProfileActions - там всё будет обновляться регулярнее.

Методы ProfileActions

Для быстрого понимания - в репозитории расположен тестовый проект test_project.xmlz.
  • Установка значения свойства профиля
C#:
void SetProperty(IZennoPosterProjectModel project, string propname, string value)
Список свойств профиля, которые можно устанавливать - можно взять отсюда: Profile Public Properties.

Параметры:

project - переменная проекта
propname - имя свойства
value - значение свойства

Пример использования:

C#:
ProfileActions.SetProperty(project, "UserAgent", "Firefox");
  • Получение значения свойства профиля
C#:
string GetProperty(string propname)
Параметры:

propname - имя свойства

Пример использования (переменная result должна быть создана заранее):

C#:
project.Variables["result"].Value = ProfileActions.GetProperty("UserAgent");
  • Установка значения заголовка инстанса
C#:
void SetHeader(Instance instance, string headername, string value, bool is_navigator_field=true)
Расширенный вариант стандартного метода instance.SetHeader, все устанавливаемые значения сохраняются в профиль.

Список заголовков инстанса, которые можно устанавливать - можно взять отсюда: NavigatorField Members.

Примечание: согласно стандартным ограничениям метода instance.SetHeader - текущий метод нужно вызывать перед вызовом любого другого метода объекта Instance.

Параметры:

instance - переменная инстанса
headername - заголовок инстанса (название поля ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField или просто HTTP-заголовок)
value - значение
is_navigator_field - true при установке поля ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField или false при установке HTTP-заголовка

Примеры использования:

C#:
ProfileActions.SetHeader(instance, "Language", "ru");
ProfileActions.SetHeader(instance, "HTTP_USER_AGENT", "ZennoPoster", false);
  • Сохранение профиля со свойствами и заголовками инстанса
C#:
void Save(IZennoPosterProjectModel project, string path, bool saveProxy=false, bool savePlugins=false, bool saveLocalStorage=false, bool saveTimezone=false, bool saveGeoposition=false)
Параметры:

project - переменная проекта
path - полный путь к файлу профиля (вместе с расширением)
saveProxy - сохранять прокси
savePlugins - сохранять список плагинов
saveLocalStorage - сохранять содержимое localStorage
saveTimezone - сохранять информацию о таймзоне
saveGeoposition - сохранять геопозицию

Пример использования:

C#:
string path = Path.Combine(project.Directory, "profiles", "test_profile.zpprofile");
ProfileActions.Save(project, path, true, true, true, true, true);
  • Загрузка профиля с простановкой свойств и заголовков инстанса
C#:
void Load(IZennoPosterProjectModel project, Instance instance, string path)
Параметры:

project - переменная проекта
instance - переменная инстанса
path - полный путь к файлу профиля (вместе с расширением)

Пример использования:

C#:
string path = Path.Combine(project.Directory, "profiles", "test_profile.zpprofile");
ProfileActions.Load(project, instance, path);
Лицензия
CC BY-NC-SA 3.0 (Creative Commons — «Attribution-NonCommercial-ShareAlike» 3.0)

Лицензия «С указанием авторства — Некоммерческая — С сохранением условий»

Даная лицензия позволяет другим людям редактировать, поправлять и брать произведение за основу для производных в некоммерческих целях при условии, что они указывают авторство и лицензируют свои новые произведения на тех же условиях.


PS: в топике можете написать идеи что ещё туда можно внедрить, связанного с профилем. Например, пофиксить что-нибудь или сохранять ещё какие-то дополнительные данные для профиля. Если идея получит много "спасибо", то я её реализую ;-)
 
Последнее редактирование:

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
На 5.10.4.0 кто-нибудь тестировал? Что-то не хочется её ставить, там столько багов новых..
 

eliadsonet

Client
Регистрация
25.05.2012
Сообщения
122
Благодарностей
48
Баллы
28
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
113

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Сделал релиз новой версии, которая в разы проще чем предыдущая. Теперь никаких мыслей о thread_id, многопотоке и прочем.

Изменения:

  • Удален отовсюду параметр thread_id
  • Удален генератор идентификаторов GenerateThreadID
  • Удалена "очистка мусора" DestroyThreadID
  • Удален параметр destroy_thread в методе Save
  • Теперь свойства профиля и заголовки инстанса объявлены с [ThreadStatic]
  • Добавлен приватный метод инициализации свойств профиля InitProperies
  • Добавлен приватный метод инициализации заголовков инстанса InitHeaders

Забрать обновление можно отсюда: https://github.com/lord-alfred/ProfileActions


PS: есть мысль - добавить функционал сохранения переменных в профиль (project.Variables[имя_переменной]), чтобы после загрузки профиля - восстановить значения из них.

Нужно/полезно? Отпишитесь плиз.
 
Последнее редактирование:

Bas

Client
Регистрация
15.12.2013
Сообщения
607
Благодарностей
251
Баллы
63
есть мысль - добавить функционал сохранения переменных в профиль (project.Variables[имя_переменной]), чтобы после загрузки профиля - восстановить значения из них.
Если бы ты это выложил эдак месяцок назад - я был бы тебе чрезмерно благодарен, так как делал проект, в котором просто после перезапуска нужно восстанавливать значения переменных, пришлось все в бд запихивать, а мог одним кубиком отделаться))))) Я думаю полезно будет многим.
 
  • Спасибо
Реакции: Lord_Alfred

Bas

Client
Регистрация
15.12.2013
Сообщения
607
Благодарностей
251
Баллы
63
После ребута инстанса и попытки пересохранить профиль получаем "CSharp OwnCode Ссылка на объект не указывает на экземпляр объекта.". Пробовал загрузить профиль обратно перед сохранением, установить заголовки и тд - все равно не работает сохранение профиля. Пока обошел следующим образом - если инстанс уже юзался, т.е. все значения есть в переменных соответствующих - пропускаю пункт "сохранить профиль". Но так можно и на слет авторизации нарваться после перезагрузки инстанса, и шаб не поймет что нужно авторизовываться заново. Поэтому это решение юзаю как временное, до ответа ТС по данной проблеме.
 

one

Client
Регистрация
22.09.2015
Сообщения
6 790
Благодарностей
1 264
Баллы
113
Лорд, я так понимаю это не готовое решение. Бери и генерируй профили а конструктор для создания более-менее уникальных профилей для аккаунтов. Так?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Лорд, я так понимаю это не готовое решение. Бери и генерируй профили а конструктор для создания более-менее уникальных профилей для аккаунтов. Так?
Это готовое решение только для хранения информации о профиле, не уникализации аккаунтов
 

one

Client
Регистрация
22.09.2015
Сообщения
6 790
Благодарностей
1 264
Баллы
113
Ммм... В общем при использовании этого решения получаем расширенный профиль содержание которого храниться в стандартных файлах профилей.

не уникализации аккаунтов
Что то не совсем понимаю. Выше же сказано:
Список свойств профиля, которые можно устанавливать
Я это понимаю так. Берем профиль, берем свойство, задаем этому свойству свое значение, сохраняем профиль.

Или мы о разном?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Я это понимаю так. Берем профиль, берем свойство, задаем этому свойству свое значение, сохраняем профиль.

Или мы о разном?
Значит я не правильно понял. Всё что выше написано - верно
 
  • Спасибо
Реакции: one

Sanekk

Client
Регистрация
24.06.2016
Сообщения
987
Благодарностей
388
Баллы
63
Lord_Alfred, ты используешь свою фичу с профилями, как она себя показывает норм\не норм?
или если кто-то юзает отпишите!
хочу себе прикрутить, вчера обновился до v5.11.0 ,но эта бага с перезаписью в полях профилей так и остается,это писец блин
лорд к твоим словам админы и разрабы так и неприслушались, как вообще это можно игнорить...

и еще есть у тебя какой то шаб тестовый для профилей, я про твои замечания set headers и про многопоток, как ты эти баги выявил?
если есть у тебя какой то шаб тестовый для профилей,то скинь буду признателен)))
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Lord_Alfred, ты используешь свою фичу с профилями, как она себя показывает норм\не норм?
или если кто-то юзает отпишите!
хочу себе прикрутить, вчера обновился до v5.11.0 ,но эта бага с перезаписью в полях профилей так и остается,это писец блин
лорд к твоим словам админы и разрабы так и неприслушались, как вообще это можно игнорить...

и еще есть у тебя какой то шаб тестовый для профилей, я про твои замечания set headers и про многопоток, как ты эти баги выявил?
если есть у тебя какой то шаб тестовый для профилей,то скинь буду признателен)))
Я юзаю эту либу с момента релиза, даже лень переписывать обратно всё на профили, но по факту и смысла нет переписывать, раз бага осталась.
Надо будет перепроверить самому и напомнить им)
 

one

Client
Регистрация
22.09.2015
Сообщения
6 790
Благодарностей
1 264
Баллы
113

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
О какой баге речь?
Библиотека сделана для исправления появившейся в 5.10.3.1 версии баги, из-за которой перезаписываются некоторые данные при сохранении профиля (пруф баги). Скорее всего похожие проблемы могли быть и на других версиях, но тому нет точного подтверждения.
 
  • Спасибо
Реакции: one

one

Client
Регистрация
22.09.2015
Сообщения
6 790
Благодарностей
1 264
Баллы
113
А, понял. Так она все еще присутствует...
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:


Я случайно на какую-то багу наткнулся судя по всему...
 

Sanekk

Client
Регистрация
24.06.2016
Сообщения
987
Благодарностей
388
Баллы
63
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:


Я случайно на какую-то багу наткнулся судя по всему...
проверил несколько профилей, все норм
 

Sanekk

Client
Регистрация
24.06.2016
Сообщения
987
Благодарностей
388
Баллы
63
не подключается либа на последней версии зенки ,ругается вот что выводит в лог
HTML:
System.NotSupportedException: Предпринята попытка загрузить сборку из сетевого ресурса, что в предыдущих версиях .NET Framework могло
привести к помещению сборки в "песочницу". Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной.
Если эта нагрузка не предназначена для изоляции сборки, включите переключатель loadFromRemoteSources.
Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=155569.
   в System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
   в System.Reflection.Assembly.LoadFile(String path)
   в ZennoLab.DotNetResolver.DotNetResolver.AddExternalReference(String path)
   в ZennoLab.ProjectMaker.Controls.ProjectEditor.ProjectBar.StaticBlockSettings.GACReferences.eIshN0NCGcQl0ZhTt6NB(Object , Object )
   в ZennoLab.ProjectMaker.Controls.ProjectEditor.ProjectBar.StaticBlockSettings.GACReferences.VG1DAgpKr9(Object  , OkButtonClickArgs  )
Lord_Alfred ты сталкивался с этим,как ее подключить?
 

Sanekk

Client
Регистрация
24.06.2016
Сообщения
987
Благодарностей
388
Баллы
63
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:


Я случайно на какую-то багу наткнулся судя по всему...
как решилась проблема?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Lord_Alfred ты сталкивался с этим,как ее подключить?
Странно, не сталкивался с этим. Попробуй у себя из исходников её скомпилить, там на гитхабе целиком весь проект есть.

как решилась проблема?
Я и забыл об этом)) Пока что не трогал, сделал чтоб такие профили помечались, но не следил за ними более
 

Sanekk

Client
Регистрация
24.06.2016
Сообщения
987
Благодарностей
388
Баллы
63
Странно, не сталкивался с этим. Попробуй у себя из исходников её скомпилить, там на гитхабе целиком весь проект есть.
шаб который работает на 5.11.0,вчера запустил на версии 5.11.3 в нем не сохраняются профиля,пишет такую ошибку
bad.png

похоже что пора переходить на стандартные зеновские методы работы с профилями,а жаль было удобно
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
шаб который работает на 5.11.0,вчера запустил на версии 5.11.3 в нем не сохраняются профиля,пишет такую ошибку
Посмотреть вложение 21614
похоже что пора переходить на стандартные зеновские методы работы с профилями,а жаль было удобно
А вот это я исправлял, но не выкладывал) стукнись в личку, скину версию, где это исправлено.

PS: суть в том, что в 5.11.3.0 добавили сохранение суперкук в профиль, поэтому нужно чуть переделать метод сохранения и перекомпилить либу
 
Последнее редактирование:
  • Спасибо
Реакции: Sanekk

Sanekk

Client
Регистрация
24.06.2016
Сообщения
987
Благодарностей
388
Баллы
63
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:


Я случайно на какую-то багу наткнулся судя по всему...
тоже щас столкнулся, дублируются файлы в профиле, лорд получилось исправить эту багу?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
тоже щас столкнулся, дублируются файлы в профиле, лорд получилось исправить эту багу?
Там либу надо допилить, сделать lock дополнительный на сохранение/загрузку в рамках этого класса.
Пока что руки не дошли это исправить, к сожалению.
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 852
Баллы
113
Выложил новую ветку на гитхаб, т.к. сейчас нет времени самому допилить и "бампнуть" новую версию, поэтому прошу помощи у коммьюнити)
Там всё то, что я тогда не довел до логического коммита + правки по свежим версиям ZP (чтобы без ошибки сохраняло профиль).
В данный момент не для продакшена эта версия, т.к. нужно пофиксить багу по дублированию содержимого переменных в многопотоке (подробнее об этом есть ссылка в описании проекта в самом начале), но в целом - уже фундамент заложен :-)

https://github.com/lord-alfred/ProfileActions/tree/3.0
 
  • Спасибо
Реакции: Tolkovateli и one

one

Client
Регистрация
22.09.2015
Сообщения
6 790
Благодарностей
1 264
Баллы
113
Я все никак не соберусь погонять-потестировать данное решение.
 

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