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

Lord_Alfred

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

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

Версия v2.0: http://zennolab.com/discussion/thre...dartnyx-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: в топике можете написать идеи что ещё туда можно внедрить, связанного с профилем. Например, пофиксить что-нибудь или сохранять ещё какие-то дополнительные данные для профиля. Если идея получит много "спасибо", то я её реализую ;-)
 
Последнее редактирование:
Сделал релиз новой версии, которая в разы проще чем предыдущая. Теперь никаких мыслей о thread_id, многопотоке и прочем.

Изменения:

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

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


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

Нужно/полезно? Отпишитесь плиз.
 
Последнее редактирование:
есть мысль - добавить функционал сохранения переменных в профиль (project.Variables[имя_переменной]), чтобы после загрузки профиля - восстановить значения из них.
Если бы ты это выложил эдак месяцок назад - я был бы тебе чрезмерно благодарен, так как делал проект, в котором просто после перезапуска нужно восстанавливать значения переменных, пришлось все в бд запихивать, а мог одним кубиком отделаться))))) Я думаю полезно будет многим.
 
  • Спасибо
Реакции: Lord_Alfred
После ребута инстанса и попытки пересохранить профиль получаем "CSharp OwnCode Ссылка на объект не указывает на экземпляр объекта.". Пробовал загрузить профиль обратно перед сохранением, установить заголовки и тд - все равно не работает сохранение профиля. Пока обошел следующим образом - если инстанс уже юзался, т.е. все значения есть в переменных соответствующих - пропускаю пункт "сохранить профиль". Но так можно и на слет авторизации нарваться после перезагрузки инстанса, и шаб не поймет что нужно авторизовываться заново. Поэтому это решение юзаю как временное, до ответа ТС по данной проблеме.
 
Лорд, я так понимаю это не готовое решение. Бери и генерируй профили а конструктор для создания более-менее уникальных профилей для аккаунтов. Так?
 
Лорд, я так понимаю это не готовое решение. Бери и генерируй профили а конструктор для создания более-менее уникальных профилей для аккаунтов. Так?
Это готовое решение только для хранения информации о профиле, не уникализации аккаунтов
 
Ммм... В общем при использовании этого решения получаем расширенный профиль содержание которого храниться в стандартных файлах профилей.

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

Или мы о разном?
 
Я это понимаю так. Берем профиль, берем свойство, задаем этому свойству свое значение, сохраняем профиль.

Или мы о разном?
Значит я не правильно понял. Всё что выше написано - верно
 
  • Спасибо
Реакции: one
Lord_Alfred, ты используешь свою фичу с профилями, как она себя показывает норм\не норм?
или если кто-то юзает отпишите!
хочу себе прикрутить, вчера обновился до v5.11.0 ,но эта бага с перезаписью в полях профилей так и остается,это писец блин
лорд к твоим словам админы и разрабы так и неприслушались, как вообще это можно игнорить...

и еще есть у тебя какой то шаб тестовый для профилей, я про твои замечания set headers и про многопоток, как ты эти баги выявил?
если есть у тебя какой то шаб тестовый для профилей,то скинь буду признателен)))
 
Lord_Alfred, ты используешь свою фичу с профилями, как она себя показывает норм\не норм?
или если кто-то юзает отпишите!
хочу себе прикрутить, вчера обновился до v5.11.0 ,но эта бага с перезаписью в полях профилей так и остается,это писец блин
лорд к твоим словам админы и разрабы так и неприслушались, как вообще это можно игнорить...

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

Я юзаю эту либу с момента релиза, даже лень переписывать обратно всё на профили, но по факту и смысла нет переписывать, раз бага осталась.
Надо будет перепроверить самому и напомнить им)
 
О какой баге речь?
Библиотека сделана для исправления появившейся в 5.10.3.1 версии баги, из-за которой перезаписываются некоторые данные при сохранении профиля (пруф баги). Скорее всего похожие проблемы могли быть и на других версиях, но тому нет точного подтверждения.
 
  • Спасибо
Реакции: one
А, понял. Так она все еще присутствует...
 
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:
durfYkG.png


Я случайно на какую-то багу наткнулся судя по всему...
 
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:
durfYkG.png


Я случайно на какую-то багу наткнулся судя по всему...
проверил несколько профилей, все норм
 
не подключается либа на последней версии зенки ,ругается вот что выводит в лог
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 ты сталкивался с этим,как ее подключить?
 
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:
durfYkG.png


Я случайно на какую-то багу наткнулся судя по всему...
как решилась проблема?
 
Lord_Alfred ты сталкивался с этим,как ее подключить?
Странно, не сталкивался с этим. Попробуй у себя из исходников её скомпилить, там на гитхабе целиком весь проект есть.

как решилась проблема?
Я и забыл об этом)) Пока что не трогал, сделал чтоб такие профили помечались, но не следил за ними более
 
Странно, не сталкивался с этим. Попробуй у себя из исходников её скомпилить, там на гитхабе целиком весь проект есть.
шаб который работает на 5.11.0,вчера запустил на версии 5.11.3 в нем не сохраняются профиля,пишет такую ошибку
bad.png

похоже что пора переходить на стандартные зеновские методы работы с профилями,а жаль было удобно
 
шаб который работает на 5.11.0,вчера запустил на версии 5.11.3 в нем не сохраняются профиля,пишет такую ошибку
Посмотреть вложение 21614
похоже что пора переходить на стандартные зеновские методы работы с профилями,а жаль было удобно
А вот это я исправлял, но не выкладывал) стукнись в личку, скину версию, где это исправлено.

PS: суть в том, что в 5.11.3.0 добавили сохранение суперкук в профиль, поэтому нужно чуть переделать метод сохранения и перекомпилить либу
 
Последнее редактирование:
  • Спасибо
Реакции: Sanekk
Те, кто юзают эту библиотеку - не замечали ли вы, что профили "бьются"?
Внутри профиля примерно вот такая штука получается:
durfYkG.png


Я случайно на какую-то багу наткнулся судя по всему...
тоже щас столкнулся, дублируются файлы в профиле, лорд получилось исправить эту багу?
 
тоже щас столкнулся, дублируются файлы в профиле, лорд получилось исправить эту багу?
Там либу надо допилить, сделать lock дополнительный на сохранение/загрузку в рамках этого класса.
Пока что руки не дошли это исправить, к сожалению.
 
Выложил новую ветку на гитхаб, т.к. сейчас нет времени самому допилить и "бампнуть" новую версию, поэтому прошу помощи у коммьюнити)
Там всё то, что я тогда не довел до логического коммита + правки по свежим версиям ZP (чтобы без ошибки сохраняло профиль).
В данный момент не для продакшена эта версия, т.к. нужно пофиксить багу по дублированию содержимого переменных в многопотоке (подробнее об этом есть ссылка в описании проекта в самом начале), но в целом - уже фундамент заложен :)

https://github.com/lord-alfred/ProfileActions/tree/3.0
 
  • Спасибо
Реакции: Tolkovateli и one
Я все никак не соберусь погонять-потестировать данное решение.
 

Похожие темы

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