python273 / vk_api

Модуль для создания скриптов для ВКонтакте | vk.com API wrapper
https://pypi.org/project/vk-api/
Apache License 2.0
1.33k stars 322 forks source link

Проблема с двухфакторной авторизацией и ReCaptcha #91

Open Fogapod opened 7 years ago

Fogapod commented 7 years ago

Очень много раз авторизовывался сегодня через api и перестала проходить двухфакторная авторизация Two factor authentication failed. Начал разбираться, в чём проблема. Переменная response_parsed в функции twofactor имеет значение [u'<!--3616759404134', u'', u'0', u'6837', u'2', u'6le00b8taaaaachiybbhy8tmoijhm5vh88jvtp4c', u'2', u'ru'], где response_parsed[4] == u'2 '. Не перехватывается здесь и здесь, что вызывает ошибку. Двойка приходит что при правильном коде, что при неправильном. При авторизации через сайт вылезает ReCaptcha. Я правильно понял, что именно она является причиной провала авторизации? Если да, как её обойти? Заранее спасибо

python273 commented 7 years ago

Я правильно понял, что именно она является причиной провала авторизации?

Да

Попробуй добавить обработчик капчи и запустить

import time

...

captcha_sid = str(int(time.time()))
captcha = vk_api.Captcha(vk_session, captcha_sid, vk_session.vk_login)
vk_session.error_handlers[vk_api.CAPTCHA_ERROR_CODE](captcha)

вместо vk_session.auth()

Fogapod commented 7 years ago

Ввожу логин и пароль Вызывается captcha_handler -> ввожу капчу Вызывается auth_handler -> ввожу код Та же ошибка, то же содержимое response_parsed ([u'<!--3616759404134', u'', u'0', u'6837', u'2', u'6le00b8taaaaachiybbhy8tmoijhm5vh88jvtp4c', u'2', u'ru'])

Всё перепроверил несколько раз

python273 commented 7 years ago

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

oceanlazy commented 7 years ago

Добрый день! У меня похожая ситуация, перестало обрабатывать капчу, обработчик капчи есть и раньше работал, вот ошибка:

Error
Traceback (most recent call last):
  File "E:\Programs\python_3_54_x32\Lib\unittest\case.py", line 59, in testPartExecutor
    yield
  File "E:\Programs\python_3_54_x32\Lib\unittest\case.py", line 605, in run
    testMethod()
  File "E:\Programs\python_3_54_x32\Lib\unittest\mock.py", line 1159, in patched
    return func(*args, **keywargs)
  File "C:\Users\Vadim.Kuznetsov\PycharmProjects\st\tests\test_vkontakte.py", line 26, in test_search
    output = self.vkontakte.search(query, session_key, 'Ukraine', 'Kiev')
  File "C:\Users\Vadim.Kuznetsov\PycharmProjects\st\models\model_vkontakte.py", line 114, in search
    self.api = self.get_api()
  File "C:\Users\Vadim.Kuznetsov\PycharmProjects\st\models\model_vkontakte.py", line 48, in get_api
    api.auth()
  File "C:\Users\Vadim.Kuznetsov\PycharmProjects\st\venv\lib\site-packages\vk_api\vk_api.py", line 158, in auth
    self._auth_cookies(reauth=reauth)
  File "C:\Users\Vadim.Kuznetsov\PycharmProjects\st\venv\lib\site-packages\vk_api\vk_api.py", line 180, in _auth_cookies
    self.vk_login()
  File "C:\Users\Vadim.Kuznetsov\PycharmProjects\st\venv\lib\site-packages\vk_api\vk_api.py", line 283, in vk_login
    'Unknown error. Please send bugreport: https://vk.com/python273'
vk_api.exceptions.AuthError: Unknown error. Please send bugreport: https://vk.com/python273

Я проверил ответ ВК и увидел следующее:

<script type="text/javascript">
var _ua = navigator.userAgent;
var locDomain = 'vk.com'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) {
  document.domain = locDomain;
}
parent.__qlClear();
addEvent = parent.addEvent;
vk = parent.vk;
parent.stManager.add(['notifier.js', 'notifier.css'], function() {
  Notifier = parent.Notifier;

  parent.onLoginReCaptcha('6Le00B8TAAAAACHiybbHy8tMOiJhM5vh88JVtP4c', 'en');
});
</script>

То есть, насколько я вижу ВК отвечает onLoginReCaptcha а не onLoginCaptcha, которую ищет vk-api

Fogapod commented 7 years ago

@vadimk2016 обновитесь до ветки master. Исправлено здесь: https://github.com/python273/vk_api/commit/3a5f2a3bc32cf8430e80369490de56ba80e5b28d

oceanlazy commented 7 years ago

Спасибо. Насколько я понял в PIP пока нет этого обновления?

python273 commented 7 years ago

Ага, нужно залить будет

python273 commented 7 years ago

Залил 9.1 https://github.com/python273/vk_api/releases/tag/v9.1

skar404 commented 6 years ago

Как я понял, сейчас в captcha_handler не передается key и url для ReCaptcha (и её нельзя пройти)?

python273 commented 6 years ago

Нет, но можно попробовать добавить

skar404 commented 6 years ago

Как это лучше реализовать, просто передача этих параметров поломает обратную совместимость, может запихнуть это в class Captcha?

python273 commented 6 years ago

Да, должно через исключение передаваться

cheloveg commented 3 years ago

Случилася похожая проблема, при частом логине с двухфакторкой программа падает:

Traceback (most recent call last):
  File "main.py", line 47, in <module>
    session.auth()
  File "venv/lib/python3.9/site-packages/vk_api/vk_api.py", line 180, in auth
    self._auth_cookies(reauth=reauth)
  File "venv/lib/python3.9/site-packages/vk_api/vk_api.py", line 200, in _auth_cookies
    self._vk_login()
  File "venv/lib/python3.9/site-packages/vk_api/vk_api.py", line 301, in _vk_login
    self._pass_twofactor(response)
  File "venv/lib/python3.9/site-packages/vk_api/vk_api.py", line 351, in _pass_twofactor
    raise TwoFactorError('Recaptcha required')
vk_api.exceptions.TwoFactorError: Recaptcha required

Process finished with exit code 1
skar404 commented 3 years ago

@cheloveg это может связано с тем что ReCaptcha неправильно распознала капчу, можно попробовать перейти на API token или добавить ретраи на месте авторизации.

krutik228 commented 1 year ago

@cheloveg , @python273 Добрый день, подскажите, как то решилось? Есть способ пройти капчу вручную или обойти её? Ибо эта капча не пропадает даже через сутки, не знаю, пропадёт ли вообще

Traceback (most recent call last):
  File "/home/nkrutikov/PycharmProjects/vk_two_factors/main.py", line 94, in <module>
    main()
  File "/home/nkrutikov/PycharmProjects/vk_two_factors/main.py", line 90, in main
    raise error_msg
  File "/home/nkrutikov/PycharmProjects/vk_two_factors/main.py", line 53, in main
    vk_session.auth()
  File "/home/nkrutikov/PycharmProjects/vk_two_factors/venv/lib/python3.8/site-packages/vk_api/vk_api.py", line 187, in auth
    self._auth_cookies(reauth=reauth)
  File "/home/nkrutikov/PycharmProjects/vk_two_factors/venv/lib/python3.8/site-packages/vk_api/vk_api.py", line 207, in _auth_cookies
    self._vk_login()
  File "/home/nkrutikov/PycharmProjects/vk_two_factors/venv/lib/python3.8/site-packages/vk_api/vk_api.py", line 330, in _vk_login
    self._pass_twofactor(response)
  File "/home/nkrutikov/PycharmProjects/vk_two_factors/venv/lib/python3.8/site-packages/vk_api/vk_api.py", line 380, in _pass_twofactor
    raise TwoFactorError('Recaptcha required')
vk_api.exceptions.TwoFactorError: Recaptcha required
python273 commented 1 year ago

Обработки рекапчи нет. Если вы только апи пользуетесь (без кукисов вк), то можно попробовать token_only=True передать в vk_session.auth(). Либо руками получить токен и передавать его в VkApi(token='...'), тогда вызывать auth не нужно будет

XaRex1337 commented 1 year ago

так и не решилось? придется отрубать двухфакторку?