vk_api
vk_api copied to clipboard
Проблема с двухфакторной авторизацией и ReCaptcha
Очень много раз авторизовывался сегодня через 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. Я правильно понял, что именно она является причиной провала авторизации? Если да, как её обойти? Заранее спасибо
Я правильно понял, что именно она является причиной провала авторизации?
Да
Попробуй добавить обработчик капчи и запустить
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()
Ввожу логин и пароль
Вызывается captcha_handler -> ввожу капчу
Вызывается auth_handler -> ввожу код
Та же ошибка, то же содержимое response_parsed
([u'<!--3616759404134', u'', u'0', u'6837', u'2', u'6le00b8taaaaachiybbhy8tmoijhm5vh88jvtp4c', u'2', u'ru']
)
Всё перепроверил несколько раз
хм, тогда не уверен как фиксить. Интересно можно ли как-то обычную капчу вызывать, вместо рекапчи
Добрый день! У меня похожая ситуация, перестало обрабатывать капчу, обработчик капчи есть и раньше работал, вот ошибка:
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
@vadimk2016 обновитесь до ветки master. Исправлено здесь: https://github.com/python273/vk_api/commit/3a5f2a3bc32cf8430e80369490de56ba80e5b28d
Спасибо. Насколько я понял в PIP пока нет этого обновления?
Ага, нужно залить будет
Залил 9.1 https://github.com/python273/vk_api/releases/tag/v9.1
Как я понял, сейчас в captcha_handler
не передается key и url для ReCaptcha (и её нельзя пройти)?
Нет, но можно попробовать добавить
Как это лучше реализовать, просто передача этих параметров поломает обратную совместимость, может запихнуть это в class Captcha?
Да, должно через исключение передаваться
Случилася похожая проблема, при частом логине с двухфакторкой программа падает:
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
@cheloveg это может связано с тем что ReCaptcha неправильно распознала капчу, можно попробовать перейти на API token или добавить ретраи на месте авторизации.
@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
Обработки рекапчи нет. Если вы только апи пользуетесь (без кукисов вк), то можно попробовать token_only=True
передать в vk_session.auth()
. Либо руками получить токен и передавать его в VkApi(token='...')
, тогда вызывать auth не нужно будет
так и не решилось? придется отрубать двухфакторку?