Загрузка...

Масслайкинг Вконтакте на Python / Многопоточность / ******

Тема в разделе Python создана пользователем setcode 9 май 2020. 2139 просмотров

  1. setcode
    setcode Автор темы 9 май 2020 27 10 май 2019
    Суть
    Скрипт берёт первые посты (можно указать сколько) из сообществ и вытаскивает ID тех людей которые Лайкали эти посты и оставляли комментарии. Дальше расскладывает ID по файлам

    UserID_All.txt - Суда тех кто лайкал посты и комментировал
    UserID_comm.txt - Суда попадают ID тех, кто только комментировал.
    UserID_Like.txt - И соответсвенно сюда только тех, кто лайкал посты.

    Теперь можно запустить Масслайкинг и выбрать кого лайкать.
    - лайкать тех пользователей, которые ставили лайки постам.
    - лайкать тех пользователей, кто оставлял комментарии.
    - лайкать тех пользователей, кто лайкал и комментировал.

    На данный момент скрипт лайкает только аватарку и случайные фотографии от 1 до 3шт рандомно. Что ещё надо, стену?

    Возможности.
    0) Поддержка ******
    1) Многопоточность - Можно добавить несколько аккаунтов и они пойдут лайкать людей по списку. Для каждого аккаунта список будет рандомизироваться, что бы вся толпа ботов в раз не залайкала одного и того же человека.
    2) Антикапча - cptch.net
    3) Кого лайкать - Только тех кто онлайн или всех
    4) Остальное можно понять из комментариев к коду.


    Код

    import vk_api
    from python_cptchnet import ImageCaptcha
    import threading
    import time
    import json
    import random
    from datetime import datetime

    LIKE_PHOTO = random.randint(0, 1) # Если 1 то лайкать случайную фотку, если 0 то нет
    ONLINE = 1 # Если 1 то лайкать тех кто Online, если 0 то всех

    print('*' * 55)
    print(' ' * 15, end='')
    print('#### Liker VK v 1.0 ####')
    print('*' * 55 + '\n')

    def GET_JSON(J):
    print(json.dumps(J, sort_keys=True, indent=4))

    Count_captcha = []
    def captcha_handler(captcha):
    SERVICE_KEY = "4543534543543543534543534"
    try:
    image_link = captcha.get_url()
    user_answer = ImageCaptcha.ImageCaptcha(service_key=SERVICE_KEY).captcha_handler(captcha_link=image_link)
    if not user_answer['Error']:
    Count_captcha.append(user_answer['captchaSolve'])
    print('CAPTCHA', str(len(Count_captcha)))
    return captcha.try_again(user_answer['captchaSolve'])
    elif user_answer['Error captcha']:
    pass
    except:
    pass


    '''
    Авторизация.
    Получение сессии.
    Запуск работы.
    '''
    def Start(coll):
    Options = '3'

    print('=' * 55)
    with open("Account.txt") as file:
    GetToken = [row.strip() for row in file]

    if coll == False:
    print('\nВыберите вариант работы:')
    print('[1] Начать лайкать тех, кто лайкал посты.')
    print('[2] Начать лайкать тех, кто оставлял комментарии')
    print('[3] Начать лайкать тех, кто лайкал и комментировал')
    print('=' * 55)
    Options = input(": ")


    for sessions in range(len(GetToken)):
    AccountProxy = ''
    AccountToken = GetToken[sessions].split(' ')[0].split(':')[0]
    vk_session = vk_api.VkApi(token=AccountToken, captcha_handler=captcha_handler)

    try:
    AccountProxy = GetToken[sessions].split(' ')[1]
    vk_session.http.proxies = {
    'http': 'http://' + AccountProxy + '/',
    'https': 'https://' + AccountProxy + '/'
    }
    except:
    try:
    VK = vk_session.get_api()
    ConnectType = 'Без Proxy'
    except:
    print(f"Ошибка авторизации: {AccountToken}")
    continue
    else:
    try:
    VK = vk_session.get_api()
    ConnectType = 'Через Proxy'
    except:
    print(f"Ошибка авторизации: {AccountToken}")
    continue

    Users = VK.users.get(fields='first_name,id,counters')
    first_name = Users[0]['first_name']
    print(f"[{first_name}] \t Авторизован: {ConnectType}")

    '''
    Начало работы.
    '''
    if coll == False:
    Start_GetRequests = threading.Thread(target=Liker, args=(first_name, VK, Options))
    Start_GetRequests.start()
    time.sleep(0.5)

    if coll == True:
    collector(first_name, VK)
    break







    '''
    Сбор ID пользователей
    '''
    def collector(first_name, VK):
    print('-' * 55)
    with open("id.txt") as file:
    GetID = [row.strip() for row in file]

    UserIDList_Like = []
    List_comm = []
    UserIDList_comm = []
    ALL_ID = []

    WALL_GET_COUNT = input("Сколько постов обходить в каждом сообщистве: ")
    if WALL_GET_COUNT.isdigit() == False:
    print(f"Ну ты пизде конечно, введи цыфру, а не эту \"{WALL_GET_COUNT}\" хуйню...")
    exit(0)

    print(f"Начинаю поиск пользователей: \nКто лайкнул и прокомментировал первые {str(WALL_GET_COUNT)} постов")
    print('=' * 55)


    for index in range(len(GetID)):
    i_count = index + 1
    wall_get = VK.wall.get(owner_id='-' + GetID[index], count=int(WALL_GET_COUNT), filter='owner')
    print(f"\n[{str(i_count)}/{len(GetID)}] Работаю в сообщистве: - https://vk.com/club{GetID[index]}")

    for post in range(len(wall_get['items'])):
    # Собрать все ID пользователей которые поставили лайки
    likes_getList = VK.likes.getList(type='post', owner_id='-' + GetID[index], item_id=wall_get['items'][post]['id'], count=1000)
    UserIDList_Like.extend(likes_getList['items'])
    time.sleep(1)
    # Собрать все ID пользователей которые оставили комментари
    comm_getList = VK.wall.getComments(owner_id='-' + GetID[index], post_id=wall_get['items'][post]['id'], count=100)
    List_comm.extend(comm_getList['items'])
    for i in range(len(List_comm)):
    try:
    UserIDList_comm.append(List_comm[i]['from_id'])
    except:
    pass

    print(f"- Найдено пользователей с лайков: \t\t [{len(set(UserIDList_Like))}]")
    print(f"- Найдено пользователей с комментариев: \t [{len(set(UserIDList_comm))}]")
    print('-' * 55)
    time.sleep(1)

    print('\n')
    print('=' * 55)
    UserIDList_Like.extend(UserIDList_Like)
    User_ID_Count = int(len(UserIDList_Like)) + int(len(UserIDList_comm))
    print("- Результат:")
    print(f"- Общее количество пользователей: \t[{str(User_ID_Count)}]")
    print(f"- Общее количество с лайков: \t\t[{len(UserIDList_Like)}]")
    print(f"- Общее количество с комментариев: \t[{len(UserIDList_comm)}]")

    ALL_ID.extend(UserIDList_Like)
    ALL_ID.extend(UserIDList_comm)

    with open('UserID_Like.txt', 'w') as file:
    for i in UserIDList_Like:
    file.write(str(i) + '\n')

    with open('UserID_comm.txt', 'w') as file:
    for i in UserIDList_comm:
    file.write(str(i) + '\n')

    with open('UserID_All.txt', 'w') as file:
    for i in ALL_ID:
    file.write(str(i) + '\n')

    Start(coll=False)




    '''
    Начало работы.
    '''
    def Liker(first_name, VK, Options):
    time.sleep(5)
    '''
    Работа по списку тех пользователей, которые ставили лайки постам
    '''
    if Options == '1':
    with open("UserID_Like.txt") as file:
    UserID = [row.strip() for row in file]

    '''
    Работа по списку тех пользователей, кто оставлял комментарии
    '''
    if Options == '2':
    with open("UserID_comm.txt") as file:
    UserID = [row.strip() for row in file]

    '''
    Работа по списку тех пользователей, кто лайкал и комментировал
    '''
    if Options == '3':
    with open("UserID_All.txt") as file:
    UserID = [row.strip() for row in file]

    random.shuffle(UserID)

    like_count = 0
    page_count = 0
    start_time = datetime.now() # будем следить по времени за каждым аккаунтом

    for photo_i in range(len(UserID)):

    page_count = page_count + 1
    time.sleep(3)
    try:
    photos_getAll = VK.photos.getAll(owner_id=UserID[photo_i], count=20, photo_sizes=0)
    users_get = VK.users.get(user_ids=UserID[photo_i], fields='photo_id,sex,online,counters,bdate')
    except:
    continue

    print('-' * 55)
    timeWork = str(datetime.now() - start_time).split('.')
    print(f"[{timeWork[0]}] [{str(like_count)}/{str(page_count)}] - [{first_name}] Смотрю страницу: \thttps://vk.com/id{users_get[0]['id']}")
    try:
    # Если профиль закрытый
    if users_get[0]['is_closed'] == True:
    print('- Пропускаю профиль закрытый')
    continue

    # Если друзей меньше * то пропустить
    if users_get[0]['counters']['friends'] < 50:
    print('- Пропускаю мало друзей')
    continue

    # Если фото меньше * то пропустить
    if users_get[0]['counters']['photos'] < 50:
    print('- Пропускаю мало фото')
    continue

    # Если пользователь Офлайн, то пропустить
    if ONLINE == 1:
    if users_get[0]['online'] == 0:
    print('- Пропускаю пользователь Офлайн')
    continue

    # GET_JSON(users_get)
    except:
    pass



    '''
    Лайкаем аватарку пользователя
    '''
    try:
    photo_id = str(users_get[0]['photo_id']).split('_')
    Add_Likes = VK.likes.add(type='photo', owner_id=UserID[photo_i], item_id=photo_id[1])
    except:
    pass
    else:
    like_count = like_count + 1
    timeWork = str(datetime.now() - start_time).split('.')
    print(f"[{timeWork[0]}] [{str(like_count)}/{str(page_count)}] - [{first_name}] Лайк на аватарку: \thttps://vk.com/id{users_get[0]['id']}?z=photo{users_get[0]['photo_id']}")

    timeWork = str(datetime.now() - start_time).split('.')
    print(f"[{timeWork[0]}] [{str(like_count)}/{str(page_count)}] - [{first_name}] TimeOut - и лайкаем фото")
    time.sleep(random.randint(30, 60)) # TimeOut после лайка на аву



    '''
    Лайкаем случайные фотографии пользователя
    '''
    Photo_Buff = []
    for i in range(len(photos_getAll['items'])):
    Photo_Buff.append(photos_getAll['items'][i]['id'])

    random.shuffle(Photo_Buff) # Так интереснее))))
    for l in range(random.randint(1, 3)): # Лайк на случайные 3 фотки
    time.sleep(random.randint(20, 50)) # TimeOut между лайками на фото
    try:
    Add_Likes = VK.likes.add(type='photo', owner_id=UserID[photo_i], item_id=Photo_Buff[l])
    except:
    pass
    else:
    like_count = like_count + 1
    timeWork = str(datetime.now() - start_time).split('.')
    print(f"[{timeWork[0]}] [{str(like_count)}/{str(page_count)}] - [{first_name}] Лайк на фото: \t\thttps://vk.com/id{users_get[0]['id']}?z=photo{str(users_get[0]['id'])}_{str(Photo_Buff[l])}")

    #print(f"[{first_name}] TimeOut")
    #time.sleep(random.randint(20, 50)) # TimeOut после того, как пролайкали фотки

    timeWork = str(datetime.now() - start_time).split('.')
    print(f"[{timeWork[0]}] [{str(like_count)}/{str(page_count)}] - [{firs

    Как это все запустить?
    Если не вкурсе что такое Python, то в google "как запуститить скипт на python" Если ничего не понял - забуть про все это!
    Создать файл "Account.txt" туда положить токен аккаунтов. Если нужно использовать ****** то формат строк такой

    Код
    Token loginProxy:PassProxy@IPProxy:port
    Между токеном и ****** ПРОБЕЛ!!!!!

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

    Результаты.
    хз тестирую первый день.
     
    9 май 2020 Изменено
  2. lastwek
    lastwek 9 май 2020 140 10 ноя 2017
    Интересная идея, попробую допилить сюда рукапчу
     
    1. setcode Автор темы
      lastwek,
      Да впринципи уже готово под anti-captcha.com Просто допиливать лень. Надо трафика насобирать, а сам алгоритм хз. Думаю всеже нужно научить скрипт лайкать записи на стене, так же как и фото рандомно несколько штук. Отклик уже есть, люди по тихому переходят на мою страницу и даже взаимные лайки были.
      Нужен ахуенный алгоритм, что бы выжеть дахуя трафика))))

      Код
              ANTICAPTCHA_KEY ="9809890890"
      try:
      image_link = captcha.get_url()
      print(image_link)
      user_answer = ImageToTextTask.ImageToTextTask(anticaptcha_key=ANTICAPTCHA_KEY). \
      captcha_handler(captcha_link=image_link)
      key = user_answer['solution']['text']
      return captcha.try_again(key)
      except:
      pass
  3. setcode
    setcode Автор темы 9 май 2020 27 10 май 2019
    Забыл сказать что ещё нужен файл id.txt куда нужно положить ID пабликов из которых нужно собрать людей.
     
  4. natixxx
    natixxx 9 май 2020 576 9 апр 2019
    Интересно, развивай и мб продавать начнешь, я бы купил ес чо, но чтобы не сильно ебаться с запуском. Сделай по красоте и продавай, желаю успехов!
     
    1. setcode Автор темы
      natixxx, Можно простенькую GUI прикрутить с настройками + копка "Запустить" Так же можно сам Python с установленными модулями положить к скрипту, только весить все это будет метров 70, зато челу не нужно будет устанавливать Python и все необходимые модули.
      pyinstaller юзать нет смысла на него орут все говно антивирусы в том числе стандартный виндовый, ибучий защитник или как там это гавно называется. Да и открытый код явным образом повышает доверии к чему либо! Так что pyinstaller отметается 100%

      Но это все позже, Надо научится извлекать выгоду из всего этого Масслайкинга, а потом я если что, могу сделать красиво и не дорого!)))
    2. natixxx
      setcode, пусть уже сами люди думают , как извлекать выгоду, трафик всегда нужен.
    3. setcode Автор темы
      natixxx, Согласен на все 100%. К тому же я мысли выразил не правильно, хотел сказать, надо научится с этого дела драфик добывать! А что с ним делать каждый конечно же сам пусть думает)))
  5. setcode
    setcode Автор темы 11 май 2020 27 10 май 2019
    Добавил немного инфы что бы можно было заниматься какой-то аналитикой и делать выводы по работе скрипта.
    - Сколько времени в работе каждый аккаунт
    - Сколько поставил лайков каждый аккаунт
    - Сколько просмотрел страниц каждый аккаунт
    [IMG]
    Как читать такой вывод в консоли?

    Это значит что:
    - Аккаунт в работе 52 секуды
    - Лайков поставленно - 0
    - Страниц просмотренно - 14
     
    1. natixxx
      setcode, да ты крутой, ждем граф интерфейс.
  6. pijawca
    pijawca 11 май 2020 че тут нового на этом вашем лолзе 295 17 июл 2019
    Интересная штука, буду следить за этой темой :cool_bun:
     
  7. natixxx
    natixxx 13 май 2020 576 9 апр 2019
    Пршила идея ( на поверхности ) , реализовать все в интерфейсе телеграма, чтобы аккаунты можно было выгружать прямо в мессенджер. Сделай услугу по аренде такого бота, цену загибать не стоит ,но хостинг и труд должны быть оплачены. Я бы лицензию такую приобрел.
     
    1. setcode Автор темы
      natixxx, Прям идеи совпали. Думаю над этим вопросом! ))) Вынуждать людей скачивать себе на ПК ёбаные экзешники то же не хочется!
    2. dedonosec
      setcode, могу помочь с реализацией
  8. natixxx
    natixxx 19 июл 2020 576 9 апр 2019
    Ну и чего оно все сдохло то?(
     
    1. setcode Автор темы
      natixxx, А что сдохло то? Не работает не лайкает? Посмотрю на днях, сейчас лето к компу подойти некогда...
    2. natixxx
      setcode, да не, процесс развития имелся ввиду. А так все круто.
Top
Загрузка...