Как ввести капчу vk api

Код для обновления фотографии профиля Вконтакте с помощью VK API. Рассмотрим работу с капчей и загрузим код на сервер для автоматического обновления фотографии.

image

Необходимые библиотеки

Устанавливаем библиотеку vk_api для работы с VK API для Python: pip install vk_api

Пример работы vk_api

import vk_api #Логин (номер телефона) и пароль от профиля ВК vk_session = vk_api.VkApi(‘login’, ‘password’) vk_session.auth() vk = vk_session.get_api() #Опубликовать пост на своей странице с текстом ‘Hello world!’ vk.wall.post(message=’Hello world!’)

Импортируем необходимые библиотеки

import os import time import random import requests import vk_api from vk_api.utils import get_random_id from urllib import urlretrieve

Авторизация

Авторизация в ВК с помощью API

vk_session = vk_api.VkApi(‘+7999132****’, ‘*********’) vk_session.auth() vk = vk_session.get_api()

Загрузка изображений

Загружаем изображения на сервер ВКонтакте.

Почему мне всегда приходится вводить капчу в ВК? Как убрать капчу ВКонтакте?


photos.getOwnerPhotoUploadServer() возвращает адрес сервера для загрузки главной фотографии на страницу пользователя.

url = vk.photos.getOwnerPhotoUploadServer()[‘upload_url’]

Для загрузки изображения на сервер ВКонтакте надо передать файл на адрес upload_url, полученный в предыдущем пункте, сформировав POST-запрос с полем photo.

#Изображения находятся в папке images images = os.listdir(«images») photo = [] for image in images: request = requests.post(url, files=).json() photo.append(request[‘photo’])

Сохраним значения сервера и хеша. Они понадобятся для обновления фотографии профиля.

server = request[‘server’] hash = request[‘hash’]

Обновление фотографии профиля

photos.saveOwnerPhoto() сохраняет фотографию пользователя.

#Выбираем рандомную фотографию и меняем фотографию профиля x = random.randint(0, len(photo)-1) vk.photos.saveOwnerPhoto(server = server, hash = hash, photo = photo[x])

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

posts = vk.wall.get() post_id = posts[«items»][0][«id»] vk.wall.delete(post_id = post_id)

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

y = 0 while(True): x = random.randint(0, len(photo)-1) while(x == y): x = random.randint(0, len(photo)-1) y = x #x и y используется для того, чтобы одна фотография не повторялась 2 раза подряд vk.photos.saveOwnerPhoto(server = server, hash = hash, photo = photo[x]) posts = vk.wall.get() post_id = posts[«items»][0][«id»] vk.wall.delete(post_id = post_id) #Удаляем предыдущую фотографию photos = vk.photos.getAll() if (photos[‘count’]>1): photo_id = photos[«items»][1][«id»] vk.photos.delete(photo_id = photo_id) time.sleep(60) #Задержка 60 сек.
Полный код
import os import time import random import requests import vk_api from vk_api.utils import get_random_id from urllib import urlretrieve vk_session = vk_api.VkApi(‘+7999132****’, ‘***********’) vk_session.auth() vk = vk_session.get_api() images = os.listdir(«images») url = vk.photos.getOwnerPhotoUploadServer()[‘upload_url’] photo = [] for image in images: request = requests.post(url, files=).json() photo.append(request[‘photo’]) server = request[‘server’] hash = request[‘hash’] y = 0 while(True): x = random.randint(0, len(photo)-1) while(x == y): x = random.randint(0, len(photo)-1) y = x vk.photos.saveOwnerPhoto(server = server, hash = hash, photo = photo[x]) posts = vk.wall.get() post_id = posts[«items»][0][«id»] vk.wall.delete(post_id = post_id) photos = vk.photos.getAll() if (photos[‘count’]>1): photo_id = photos[«items»][1][«id»] vk.photos.delete(photo_id = photo_id) time.sleep(60)

Еще по теме:  Как выбрать в ВК какое сообщество лучше создать в контакте для бизнеса

Как не вводить капчу в вк


Но после несколькольких десятков обновлений фотографии профиля выйдет ошибка

Captcha: Captcha needed

Давайте разберемся как работать с капчей в VK API.

Работа с captcha

В методе vk_api.VkApi() уже реализована работа с капчей. Необходимо кроме логина и пароля передать функцию обработки капчи captcha_handler.

vk_session = vk_api.VkApi(‘+7999132****’, ‘**********’, captcha_handler=captcha_handler)

Добавляем функцию captcha_handler(captcha), которая принимает адрес капчи, отправляет изображение капчи в сообщения пользователя и ждёт сообщение с капчей от пользователя.

def captcha_handler(captcha): #Получаем адрес капчи captcha_url = captcha.get_url() #Сохраняем изображение капчи на компьютер urlretrieve(captcha_url, «captcha.jpg») #Получаем ключ (send_captcha() см. далее) key = send_captcha(captcha_url) #Отправляем ключ (текст) капчи return captcha.try_again(key)

Функция для отправки сообщений с изображением капчи пользователю.

Методы messages не доступны для пользователя с сервера, поэтому надо создать группу и получить token.

  1. Создаём группу/публичную страницу
  2. Управление => Работа с API => Создать ключ
  3. Выбираем:
    • Разрешить приложению доступ к сообщениям сообщества
    • Разрешить приложению доступ к фотографиям сообщества
    • Копируем ключ
      Так же надо включить Сообщения в настройках группы (Управление => Сообщения) и разрешить сообщения (в меню группы)

    def send_captcha(captcha_url): #token (ключ) группы token = «КЛЮЧ» vk_session = vk_api.VkApi(token = token) vk = vk_session.get_api() #Получаем адрес капчи url = vk.photos.getMessagesUploadServer()[‘upload_url’] #Загружаем изображение на сервер ВКонтакте request = requests.post(url, files=).json() #Сохраняем фотографию photo = vk.photos.saveMessagesPhoto(server=request[‘server’], photo = request[‘photo’], hash = request[‘hash’]) attachment = ‘photo<>_<>’.format(photo[0][‘owner_id’], photo[0][‘id’]) #Отправляем сообщение vk.messages.send( user_id = ВАШ_ID, attachment = attachment, random_id=get_random_id()) #Удаляем капчу os.remove(«captcha.jpg») #Ждем ответа key = » while (key == »): #Получаем первый в списке диалог messages = vk.messages.getDialogs()[‘items’][0] #Если к сообщению не прикреплено изображение, то значит это ключ if ‘attachments’ not in messages[‘message’].keys(): key = messages[‘message’][‘body’] return key

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

    Полный код

    import os import time import random import requests import vk_api from vk_api.utils import get_random_id from urllib import urlretrieve def captcha_handler(captcha): captcha_url = captcha.get_url() urlretrieve(captcha_url, «captcha.jpg») key = send_captcha(captcha_url) print(key) return captcha.try_again(key) def send_captcha(captcha_url): token = «КЛЮЧ» vk_session = vk_api.VkApi(token = token) vk = vk_session.get_api() url = vk.photos.getMessagesUploadServer()[‘upload_url’] request = requests.post(url, files=).json() photo = vk.photos.saveMessagesPhoto(server=request[‘server’], photo = request[‘photo’], hash = request[‘hash’]) attachment = ‘photo<>_<>’.format(photo[0][‘owner_id’], photo[0][‘id’]) vk.messages.send( user_id=ВАШ_ID, attachment = attachment, random_id=get_random_id()) os.remove(«captcha.jpg») key = » while (key == »): messages = vk.messages.getDialogs()[‘items’][0] if ‘attachments’ not in messages[‘message’].keys(): key = messages[‘message’][‘body’] return key vk_session = vk_api.VkApi(‘+7999132****’, ‘*********’, captcha_handler=captcha_handler) vk_session.auth() vk = vk_session.get_api() images = os.listdir(«images») url = vk.photos.getOwnerPhotoUploadServer()[‘upload_url’] photo = [] for image in images: request = requests.post(url, files=).json() photo.append(request[‘photo’]) server = request[‘server’] hash = request[‘hash’] y = 0 while(True): x = random.randint(0, len(photo)-1) while(x == y): x = random.randint(0, len(photo)-1) y = x vk.photos.saveOwnerPhoto(server = server, hash = hash, photo = photo[x]) posts = vk.wall.get() post_id = posts[«items»][0][«id»] vk.wall.delete(post_id = post_id) photos = vk.photos.getAll() if (photos[‘count’]>1): photo_id = photos[«items»][1][«id»] vk.photos.delete(photo_id = photo_id) print(«Successfully», x) time.sleep(60)

    Еще по теме:  Как отправить большой файл Вконтакте

    Для круглосуточного выполнения кода я использую VPS хостинг. Загружаю изображения и выполняю код на сервере.

    Источник: habr.com

    Python-сообщество

    [RSS Feed]

    • Начало
    • » Python для новичков
    • » Как получить ссылку на картину с капчей в вк?!

    #1 Дек. 6, 2018 07:59:22

    Как получить ссылку на картину с капчей в вк?!

    К примеру возьмем код для отправки постов на стену:

    import vk_api import time vk = vk_api.VkApi(login = ‘*********’, password = ‘******’) #Авторизуемся на сайте. vk.auth() auth_test=vk.method(‘users.get’,’users_ids’:’0′>) #Выводим список информации об авторизованном пользователе, a=auth_test[0] a_id=a[‘id’] a_last_name=a[‘last_name’] a_first_name=a[‘first_name’] print(a_first_name, a_last_name,’id:’,a_id) for x in range(20): vk.method(‘wall.post’, ‘owner_id’: ‘499187139’, ‘message’:x,’attachments’: ‘photo138362473_456239574%2Fphotos138362473’>)
    После отправки определенного количества постов возникает исключение:
    Traceback (most recent call last): File «C:Program FilesPython37-32A.py», line 16, in module> vk.method(‘wall.post’, ‘owner_id’: ‘499187139’, ‘message’:x,’attachments’: ‘photo138362473_456239574%2Fphotos138362473’>) File «C:Program FilesPython37-32libsite-packagesvk_apivk_api.py», line 610, in method response = self.error_handlers[error.code](error) File «C:Program FilesPython37-32libsite-packagesvk_apivk_api.py», line 492, in captcha_handler raise captcha vk_api.exceptions.Captcha: Captcha needed

    Подскажите, как обработать это исключение? Если речь идет о капче, то где взять ссылку на картинку?

    #2 Дек. 6, 2018 09:30:27

    Как получить ссылку на картину с капчей в вк?!

    Если какое-либо действие (например, отправка сообщения) выполняется пользователем слишком часто, то запрос к API может возвращать ошибку “Captcha needed”. При этом пользователю понадобится ввести код с изображения и отправить запрос повторно с передачей введенного кода Captcha в параметрах запроса.
    ….
    Если возникает данная ошибка, то в сообщении об ошибке передаются также следующие параметры:

    captcha_sid — идентификатор captcha
    captcha_img — ссылка на изображение, которое нужно показать пользователю, чтобы он ввел текст с этого изображения.

    almax
    Подскажите, как обработать это исключение?

    Также как и все остальные исключения

    Еще по теме:  Браузер не открывает vk com

    try: бла-бла-бла except vk_api.exceptions.Captcha: бла-бла-бла че там на капче? может лучше поставить задержку между отправкой сообщений?
    [code python][/code]

    Бериегите свое и чужое время.

    Отредактировано PEHDOM (Дек. 6, 2018 09:59:45)

    Источник: python.su

    Vkontakte API – Captcha needed

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

    Как то раз пришлось изменить пароль на аккаунт VK и после этого бот перестал заливать что либо с воплями Captcha needed. Подумал может смены пароля нужно заново сгенерировать Access token, но нет, это не помогло.

    Немного изучив API VK, попробовал ввести капчу, а именно передать запрос с капчей. Для этого понадобится две вещи:

    1. captcha_sid – Это ID капчи
    2. captcha_img – Ссылка на картинку капчи

    Все эти данные есть при запросе к API vk, а именно при попытке загрузить картинку, API vk возвращала Captcha needed и данные капчи (captcha_sid, captcha_img и need_validation)

    Для работы с API VK я использую Vkontakte PHP SDK. В код класса добавил следующее:

    $response = $this->api(‘photos.getWallUploadServer’, [ ‘group_id’ => $publicID, ‘captcha_sid’ => 1231231231231, ‘captcha_key’ => ‘vdnmhzq’ ]);

    Где в переменную captcha_sid вставляем ID из не удачной попытки подключения к API VK, а в переменную captcha_key вводим код с картинки.

    Все, пробуем залить картинки на стену:

    => Process Twit ID: 863710483387xxxxxx => No images. Skip Twit => Process Twit ID: 863617837721xxxxxx => Parse img: 1 File C_wl8w0XgAAM4kS.png downloaded % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3962 100 575 100 3387 663 3911 —:—:— —:—:— —:—:— 3911 => Process Twit ID: 863607676240xxxxx => Parse img: 1 File C_wQ1weVYAA3o8l.jpg downloaded % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 24204 100 577 100 23627 780 31948 —:—:— —:—:— —:—:— 31971 => Process Twit ID: 86359804103xxxxxxx => No images. Skip Twit => Process Twit ID: 86358528341xxxxxxx => Parse img: 1 File C_wCjvSXgAApb1R.jpg downloaded % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 9679 100 577 100 9102 745 11754 —:—:— —:—:— —:—:— 11744

    Источник: ipcalc.co

    Рейтинг
    ( Пока оценок нет )
    Загрузка ...