vk_api
vk_api copied to clipboard
Бан аккаунта
Изначально аккаунт не заблокирован.
После авторизации, а затем отправки первого запроса получаю ошибку: [5] User authorization failed: user is blocked.
Затем оказывается, что аккаунт заблокирован. Аккаунт можно восстановить, но не более 2 раз, затем следует более длительный бан, но не перманентный.
Ошибка возникает при отправке запроса с конкретного ПК, с которого ранее(несколько дней назад) было осуществлено много запросов к API. На другом ПК ошибка не воспроизвелась (информация от товарища). Что может быть причиной?
P.S. выдача бана не зависит от vk_config и аккаунта. Код который работал раньше - перестал работать по этой причине.
P.P.S. Повторил сценарий на третьем ПК, с абсолютно новым аккаунтом ВК, под другим способом подключения к интернету. Вновь получил бан.
Окружение
vk_api: 11.9.6
Пример
vk_session = vk_api.VkApi(login="login", password="password")
vk_session.auth()
vk = vk_session.get_api()
link = input()
link = link.split('/')[-1]
vk.users.get(user_ids=link)
Не уверен в чем именно причина, другие люди тоже писали о блокировках.
Если нужна аутентификация по логину и паролю, то попробуйте создать свое приложение и передавать в app_id. Если не нужна, то руками получить токен и передавать в token.
По результатам экспериментов (20 пожженых аккаунтов): Банилка реагирует на флоу авторизации (на что конкретно - не знаю). Либо сразу блочит, либо пропускает и блочит через несколько минут.
Точно не помогает:
- смена appid (свои/чужие/новые/старые)
- смена IP
Если юзать токен полученный легальным путем и не трогать auth, то все работает (в том числе с скомпрометированных многочисленными банами ip)
Можно еще попробовать ставить другой юзерагент
например
vk_session.http.headers['User-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0'
Да, юзер агент тоже не помогает. Пробовал разные варианты. Также менял версию API. Выставлял задержку между запросами в секунду. Особенности блокировки:
- Блокировка: Подозрительная активность.
- Токен получает нормально, и уже на 1-10 запросе блочит.
- Блок прилетает на методы group/wall. К примеру на перечисление городов (список стран/городов) - не трогает
Учитывая, вышеперечисленное, думаю аккаунт попадает в подозрительные, после прохождения flow авторизации. Может не хватает какого параметра при эмуляции входа или js чек какой-нибудь вставили (не рисерчил).
@sadspirit
Если юзать токен полученный легальным путем
Прошу прощения, можете раскрыть тему про "легальный путь" — как получить такой токен?
Имеется ввиду создание приложения и получение токена через него?
Аналогичная проблема - блокнули страницу 2 раза подряд. Рецепт: залогиниться и выполнить users.get. Запрос выполняют и блочат страницу. Вычисляют ботов?
UPD: пока альтернативный способ - использовать токен, к примеру от VK Admin.
@sadspirit
Если юзать токен полученный легальным путем
Прошу прощения, можете раскрыть тему про "легальный путь" — как получить такой токен?
Имеется ввиду создание приложения и получение токена через него?
https://vk.com/dev/first_guide
Подтвержаю, с позавчерашнего дня стали банить. ПС всегда подключался с использованием своего ID приложения.
Друзья, если найдете решение данной проблемы - отпишите пожалуйста сюда.
Дня 3 назад улетел первый парсер у меня, окей, вставляю другой аккаунт, вчера ночью замечаю, что он в бане, разбаниваю, потом смотрю, что он отлетел вновь сразу после авторизации. Тоже буду копать в чем дело, видимо они решили жестко вставить палки в колеса ботоводам.
Друзья, если найдете решение данной проблемы - отпишите пожалуйста сюда.
Получил токен через https://oauth.vk.com/authorize?client_id=приложение&display=page&redirect_uri=https://oauth.vk.com/blank.html&response_type=token
&scope=wall,offline ручками и передал его:
vk_session = vk_api.VkApi(token=acc_token)
еще добавил, на всякий случай:
vk_session.http.headers[ 'User-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0'
А получить remixsid возможно только через авторизацию по логину?
Получил токен через https://oauth.vk.com/authorize?client_id=приложение&display=page&redirect_uri=https://oauth.vk.com/blank.html&response_type=token &scope=wall,offline ручками и передал его: vk_session = vk_api.VkApi(token=acc_token)
еще добавил, на всякий случай: vk_session.http.headers[ 'User-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0'
Попробовал выше описанные примеры - либо бан либо требует 'Login is required to auth'

При реверсе их официального приложения ВК было выявлено, что можно авторизовываться через bearer, подставляя токен в значение заголовка. Брал токены от разных приложений (kate, vk admin etc) и работает. (Брал руками токен, на баны не проверял, проверьте и отпишитесь)
Программно токен не пробовал получать, но закину сюда идею, может быть кто нибудь исследует проблему и сможет её решить.
from requests import Session
import vk_api
user_agent = {"User-Agent": "VKShitApp/6.9.1-5828 (Android 14.8.8; SDK 26; armeabi-v7a; foobar ShitVkOS; ru; 800x640)"}
token = "my_secret_token"
session = Session()
session.headers.update(user_agent)
session.headers.update({"Authorization": f"Bearer {token}"})
vk_session = vk_api.VkApi(session=session, api_version="5.181")
vk_api_session = vk_session.get_api()
print(vk_api_session.account.getInfo())
За метод выше блокировка по подозрительной попытке авторизации сразу. Попробую поковыряться сейчас, сделать чуть другой метод.
Удалось починить вот таким методом, с предварительным удалением vk_config.v2.json
vk_session = vk_api.VkApi(
login=settings.VK_LOGIN,
password=settings.VK_PASSWORD,
)
try:
vk_session.http.headers['User-agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:94.0) Gecko/20100101 Firefox/94.0'
vk_session.auth(token_only=True)
except vk_api.AuthError as error_msg:
print(error_msg)
return error_msg
Удалось починить вот таким методом, с предварительным удалением
vk_config.v2.jsonvk_session = vk_api.VkApi( login=settings.VK_LOGIN, password=settings.VK_PASSWORD, ) try: vk_session.http.headers['User-agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:94.0) Gecko/20100101 Firefox/94.0' vk_session.auth(token_only=True) except vk_api.AuthError as error_msg: print(error_msg) return error_msg
а без token_only=True не работает?
Может быть связано с #437
В моём случае сработало так:
vk_session = vk_api.VkApi(login, password)
vk_session.http.headers['User-agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:94.0) Gecko/20100101 Firefox/94.0'
vk_session.auth()
Не уверен, может быть, дело было в аккаунтах.
vk_api: 11.9.6
Здравствуйте, может быть вам поможет аутификация с токеном? Я вот просто сколько уже сижу - ни разу не банили.
import vk_api
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
from vk_api.longpoll import VkLongPoll, VkEventType
banlist = [000000000,000000000] # тут писать id-шники тех кого хочешь удалять сообщения
def auth_handler():
key = input("Введите код для двухфакторной аутификации: ")
remember_device = True
return key, remember_device
def main():
login, password = '+78005553535','password'
vk_session = vk_api.VkApi(
login, password, token="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234", app_id="2685278",
auth_handler=auth_handler
)
try:
vk_session.auth()
except vk_api.AuthError as error_msg:
print(error_msg)
return
longpoll = VkLongPoll(vk_session)
vk = vk_session.get_api()
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
print('New message:')
if event.from_user or event.from_chat:
if event.user_id in banlist:
vk.messages.delete(message_ids=event.message_id, peer_id=event.peer_id)
if event.from_chat:
print(event.user_id, 'in chat', event.chat_id)
elif event.from_user:
print('from user:', event.user_id)
print('Text: ', event.text)
print()
if __name__ == '__main__':
main()
Токен получить можно тут. В примере указан app_id для kate mobile
Здравствуйте, может быть вам поможет аутификация с токеном? Я вот просто сколько уже сижу - ни разу не банили.
Большое человеческое СПАСИБО! Наконец-то получилось пофиксить вход для проблемных аккаунтов, над которой бился несколько суток.