1 место Шаблон для нагуливания профилей с настройкой многозадачности в рамках одного потока (паралелльные запросы).

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
Настройка многозадачности в рамках одного потока.

В этот раз поговорим о многопоточности/многозадачности внутри одного потока зеннопостера.

Тема должна понравиться обладателям лайт/стандарт лицензий, зеннобоксов и тем, кто хочет запускать шаблон многопоточно в проджект-мейкере. Ну, может еще кому-то, кто начинает грызть C# или просто прохожему.

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

Ничего сложного и секретного здесь нет. Простейший пример и простейшее исполнение на самом деле.
Я не стал делать рерайт документации и статей на блогах по используемым методам, а решил собрать то, что можно пощупать, как говорится.

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

Первое реализовано при помощи класса Thread Thread а второе при помощи класса Semaphore.

Шаблон выполнен в простом варианте, чтобы было доступнее для понимания, как это вообще организовано

Объявляем класс Program, в его конструкторе назначаем все необходимые переменные для работы, для этого передаем ему текущий project и instance.

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

104980



Последней строкой вызывается метод Run(). Это основной обычный поток шаблона. Его цель запустить дочерние потоки и дождаться их завершения.

В данном примере под каждый сайт из случайной выборки создается и стартует отдельный поток Thread, котрый будет исполнять метод Worker().

Каждому потоку назначено уникальное имя хоста, Url которого ему предстоит посетить. Все потоки складываются в список и далее основной поток просто в цикле проверяет состояние дочерних. Также, он проверяет принудительную остановку по кнопке "Прервать" и в этом случае принудительно завершает запущенные потоки. В конце сохраняется профиль.

1679305746178.png

В полученной конструкции в методе Worker() содержится вся логика для работы каждого отдельного потока в своей вкладке.

1679306220674.png

Одновременная работа потоков регулируется при помощи Semaphore, который пропускает к одновременному выполнению лишь ограниченное число потоков.

А дальше тут все предельно просто. Да, можно вести всю ту же работу, к которой вы все привыкли одновременно в нескольких вкладках.

По имени потока открывается новая вкладка с этим же именем, по хосту отлавливается Url из случайной выборки, ожидание загрузки страницы и рандомное время пребывания выполненного в виде самой примитивной паузы. Ну и оповещение в лог.

Прикрепляю список сайтов, который у меня завалялся от какого-то древнего заказа по парсингу dmoz.

Вот так вот просто это на самом деле устроено. 50 строк кода и немножко логики.

А теперь давайте попробуем позапускать и посмотреть, что же из этого получилось

Нагуливание профилей (кук) с настройками многозадачности.

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

Шаблон выбирает из папки Profiles профиль, у которого замечена самая ранняя последняя активность, это организовано при помощи сортировки по FileInfo.LastAccessTime.

Поэтому перед запуском папка Profiles уже должна быть создана и содержать в себе профили в формате .zpprofile

В настройках все достаточно просто и понятно.

Я не делал муторные проверки на некорректность заполнения настроек. Это усложнило бы только читабельность кода. Поэтому будьте внимательны: Настройки есть, значит их надо заполнить.
В списке прокси должны быть прокси, в списке сайтов список url сайтов без дублей по хостам. Одновременных 100 потоков лучше не ставить.


1679252265853.png

Жмем старт, +1 и смотрим, как идет работа.

1679253792711.png

Минимальная версия для запуска шаблона 7.2.0.0
 
Номер конкурса шаблонов
Десятый конкурс шаблонов

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование модератором:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 649
Благодарностей
1 317
Баллы
113
Как по мне, то это 1-е место) Мой голос Ваш.
 
  • Спасибо
Реакции: DenisK и Alexmd

webulitka

Client
Регистрация
20.09.2019
Сообщения
98
Благодарностей
30
Баллы
18
Пока ихмо ТОП из всех предоставленных, мой голос за Alexmd!
 
  • Спасибо
Реакции: traffman и Alexmd

baracuda

Client
Регистрация
19.06.2013
Сообщения
733
Благодарностей
247
Баллы
43
плюсую
 
  • Спасибо
Реакции: Alexmd

radv

Client
Регистрация
11.05.2015
Сообщения
3 672
Благодарностей
1 857
Баллы
113
Интересно посмотреть реализацию многопотока :ay:
 
  • Спасибо
Реакции: Alexmd

sabir

Client
Регистрация
20.02.2018
Сообщения
28
Благодарностей
6
Баллы
3
помоги пожалюста, я чтото делаю не так и не знаю как исправить так как не разбераюсь в сишарпе
Screenshot_3.jpgScreenshot_4.jpg Screenshot_5.jpg
формат прокси в тхт socks5://log:pass@ip:port
 
  • Спасибо
Реакции: Alexmd

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 126
Благодарностей
484
Баллы
83
Это очень хорошо!
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
помоги пожалюста, я чтото делаю не так и не знаю как исправить так как не разбераюсь в сишарпе
Посмотреть вложение 104939Посмотреть вложение 104940 Посмотреть вложение 104941
формат прокси в тхт socks5://log:pass@ip:port
@sabir спасибо.
хоть кто-то запустить попробовал. я так и знал, что люди по заголовкам голосуют, а не по шаблонам. 28 скачиваний и Вы первый, кто попытался запустить.
дело в том, что я тестировал без прокси, так как просто лень было искать файл с прокси на компе. впихнул и даже не проверил, как оно отработает - поспешил. а там действительно ошибка компиляции.
Отредактировать не могу пост. так что прикрепляю сюда.
 

Вложения

Petr_G

Client
Регистрация
20.10.2017
Сообщения
86
Благодарностей
34
Баллы
18
  • Спасибо
Реакции: Alexmd

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

che100

Client
Регистрация
18.04.2017
Сообщения
808
Благодарностей
499
Баллы
63
  • Спасибо
Реакции: Alexmd

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 660
Благодарностей
918
Баллы
113

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
Добрый день. а есть подобная версия для хромиума?

Или как его с профиль папами запустить в работу?
Сделал и для папок в хромиуме. В текущей реализации, в директории проекта должна быть папка "Профиль-папки" с профиль-папками.

Попробовал запустить в многопотоке шаблоны, но не вышло. Подправил кое-что, проверил, теперь работает исправно.
Также, изменил логику немного, вырезал семафор, так как он тут не нужен.
Шаблоны теперь запускают вкладки в количестве равном указанному количеству максимальных потоков из настроек и они уже разбирают ссылки из списка, не закрываясь после посещения каждого сайта, как это сделано вначале. Это сэкономит еще ресурсов.
Теперь профили растут значительно быстрее и с наименьшими затратами ресурсов, нежели в реализации стандартным подходом.

1679522507511.png1679522546190.png1679522765350.png

Надеюсь, это действительно кому-то когда-то пригодится. Если уж и гулять профили, то как-то так, я думаю. Ну, всегда думал, но вот так совпало, что и руки дошли.
 

Вложения

  • Спасибо
Реакции: cmvvo, Konrod_m и samsonnn

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 649
Благодарностей
1 317
Баллы
113
Спасибо за реализацию, вам огромный, жирный + в репу.
 
  • Спасибо
Реакции: Alexmd

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Да, отдам голос свой тоже. Нужная вещь и открытая. Пили под себя пока не устанешь.
 
  • Спасибо
Реакции: Alexmd

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 660
Благодарностей
918
Баллы
113
Надеюсь, это действительно кому-то когда-то пригодится.
Спасибо! Работает с ПП.

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

С общим кодом, к сожалению, вообще не дружу..
 
  • Спасибо
Реакции: lbvf65

lbvf65

Client
Регистрация
20.08.2020
Сообщения
438
Благодарностей
113
Баллы
43
Спасибо! Работает с ПП.

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

С общим кодом, к сожалению, вообще не дружу..
Есть возможность как то указать, чтобы использовал встроенные данные?
было бы классно использовать стандартные данные профиля
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
Спасибо! Работает с ПП.

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

С общим кодом, к сожалению, вообще не дружу..
Ну так общий код здесь вообще ни при чем. В шаблонах использованы настройки по умолчанию, так что настройки профиля в вашем распоряжении.
 

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 660
Благодарностей
918
Баллы
113
Ну так общий код здесь вообще ни при чем. В шаблонах использованы настройки по умолчанию, так что настройки профиля в вашем распоряжении.
Может не правильно выразился. Извиняюсь.

Запускаю ваш шаблон.
105101


Запускаю с теми же профиль папками другой шаблон.
105102



Может может кто-то подсказать, почему основной шаблон запускает инстанс не учитывая размеры устройств?
 

DenisK

Client
Регистрация
28.06.2016
Сообщения
591
Благодарностей
288
Баллы
63

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
А в каком формате проки должны быть? Положил одну в стандартном protocol:user:pass@ip:port и получаю ошибку.
105105

105106
 

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 660
Благодарностей
918
Баллы
113
А в каком формате проки должны быть? Положил одну в стандартном protocol:user:pass@ip:port и получаю ошибку.
у меня в стандартоном зеновском запускаются и в мейкере и в постере. возможно версию не ту запускаете. в комментах было что-то подобное
 

one

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

Konrod_m

Client
Регистрация
18.09.2014
Сообщения
1 660
Благодарностей
918
Баллы
113

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Да, пошло, поехало.

ТС, прокомментирую сей полезный продукт. То, что он куки нагуливает, это хорошо, но параллельно он оставляет следы в метриках на посещенных сайтах которые на них установлены. Продолжительность в 2-3сек посещения на сайте не дает много плюсов профилю, так же не дают плюсов без действие на сайте. С таким профилем посетив сайт, нагуляв куки перейдя на другой можно уже быть помеченным не с совсем хорошей репутацией.

Это так, комментарий, мысли в слух.

Был бы на экшенах я бы под себя подправил.
 
  • Спасибо
Реакции: pix и искра

one

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

ex3maL

Client
Регистрация
22.05.2020
Сообщения
359
Благодарностей
267
Баллы
63
Одному мне показалось что заголовок шаблона и содержимое это 2 разные вещи?
берем 1ый пост и смотрим лог
там 20 сайтов - сайты посещаются поочередно и никаким образом ни параллельно.
Какие там параллельные запросы и посещения?
async await и прочего - просто нет.
А все такие хлопают в ладоши, ой как здорово, ппц, вам кусок кода дали и все бегут голосовать
А за что? за tab.Navigate в обертке?)))
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 383
Баллы
113
Да, пошло, поехало.

ТС, прокомментирую сей полезный продукт. То, что он куки нагуливает, это хорошо, но параллельно он оставляет следы в метриках на посещенных сайтах которые на них установлены. Продолжительность в 2-3сек посещения на сайте не дает много плюсов профилю, так же не дают плюсов без действие на сайте. С таким профилем посетив сайт, нагуляв куки перейдя на другой можно уже быть помеченным не с совсем хорошей репутацией.

Это так, комментарий, мысли в слух.

Был бы на экшенах я бы под себя подправил.
На форуме полно примеров + почти каждый кубик конвертируется в код. Если что-то не получается или не находится, можно всегда спросить у коллег на форуме. Благо, тут всегда помогают советами и сниппетами.
Логика работы в каждом потоке выполняется в методе Worker(). Не думаю, что так сложно осилить это и изменить паузу и добавить какое-то необходимое поведение. Каждому не угодишь, вот я и собрал самый минимум. Посещение и задержка.
Если бы моя деятельность была как-то связана с особенностями прокачки профилей и именно это было бы целью этого шаблона, я бы может и написал бы идеальную, но ни разу нерабочую схему нагула в один поток и регистрацию на всех сервисах без смс, а не то, что написал.

Может не правильно выразился. Извиняюсь.

Может может кто-то подсказать, почему основной шаблон запускает инстанс не учитывая размеры устройств?
Кажется, я понял Ваш вопрос. Я с ПП никогда не сталкивался до Вашей просьбы. Мне за глаза хватает и обычных профилей для моих задач.
По идее же, должно подтягиваться все. Я тоже хотел бы знать. Надо у разрабов постера спросить как из кода заставить это работать так, как мы этого ожидаем. Потому что, ну, видимо, недостаточно просто указать папку профиля при запуске инстанса. Но кажется когда-то был ответ, что то, что нам дали в методе Launch() - это все, что может быть доступно из кода.



Одному мне показалось что заголовок шаблона и содержимое это 2 разные вещи?
берем 1ый пост и смотрим лог
там 20 сайтов - сайты посещаются поочередно и никаким образом ни параллельно.
Какие там параллельные запросы и посещения?
async await и прочего - просто нет.
А все такие хлопают в ладоши, ой как здорово, ппц, вам кусок кода дали и все бегут голосовать
А за что? за tab.Navigate в обертке?)))
tab.Navigate действительно выполняется последовательно в каждой вкладке, но так же действительно одновременно в нескольких. К чему здесь async конкретно в этой реализации? Чтобы напугать юзеров и показать, что умеешь использовать это ключевое слово в коде, даже когда это не совсем уместно? Есть люди, которые вообще общего кода, как огня боятся. Но в такой простой реализации им будет проще внести правки в Worker() и изменить поведение профиля на посещаемых сайтах.

Шаблон действительно простой, как 2 копейки и я сам никак не ожидал такой волны одобрения, которая всегда сопровождается такими постами(спасибо, что без оскорблений).
Видимо, нравится людям не элементарный метод в обертке, а сама обертка. Заворачивай в нее что хочешь. У каждого своя секретная методика по нагулу, как я понял.

Это тема о том, что на такое возможно крайне важное мероприятие можно и лучше, наверное, запускать не 10 браузеров, а 1 с 10 вкладками, и совершать необходимые действия в каждой вкладке одновременно.
 
  • Спасибо
Реакции: bados и one

ex3maL

Client
Регистрация
22.05.2020
Сообщения
359
Благодарностей
267
Баллы
63
К чему здесь async конкретно в этой реализации
это для примера, просто к слову)
параллельные запросы - это когда 20 сайтов (как в примере) - посетило за 2-5 сек. Все и сразу и быстро.
А тут что? берем список ссылок ходим по ним в цикле в новых вкладках - готово. 1 место) 70% голосов за)))
Дальше есть продолжение...нецензурное, поэтому пожалуй остановлюсь.
 
  • Спасибо
Реакции: zarufakis и Dmitriy Ka

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