Уведомления

Группа в Telegram: @pythonsu

#1 Июль 25, 2017 18:26:50

Denny_Colt
Зарегистрирован: 2017-07-19
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Python. Авторизоваться ВК без Api

Пытаюсь авторизоваться вконтакте.
Пока безрезультатно, кто может помочь? ))

 import requests
def autoriz ():
 session = requests.Session()
 url = 'https://login.vk.com/?act=login'
 data = {'email': 'Login', 'pass': 'Password'}
 print(requests.post(url, data=data).text)
def main():
    autoriz()
if __name__ == "__main__":
    main()

Вот запрос сервера
 https://login.vk.com/?act=login
POST /?act=login HTTP/1.1
Host: login.vk.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Referer: https://vk.com/
Cookie: remixlang=0; remixlhk=91449f35rd9335b6f8; remixflash=0.0.0; remixscreen_depth=24; remixdt=28800; remixseenads=1; t=8bb65e68e7aba59d62bc61da; remixtst=6d0d172c
Connection: keep-alive
Upgrade-Insecure-Requests: 1
act=login&role=al_frame&expire=&captcha_sid=&captcha_key=&_origin=https%3A%2F%2Fvk.com&ip_h=9c7275eda134r621f8&lg_h=33770f44feb32a7873&email=login&pass=password: undefined

Буду рад любой помощи



Офлайн

#2 Июль 28, 2017 09:09:43

Vintets
Зарегистрирован: 2016-07-05
Сообщения: 41
Репутация: +  6  -
Профиль   Отправить e-mail  

Python. Авторизоваться ВК без Api

Отправлять на 'https://login.vk.com/?act=login' логин/пароль нужно не голыми.

Сначала идём на страницу 'https://vk.com/', получаем там предварительные cookies.
Из текста страницы взять скрытые параметры. Вот они в коде html:

 <input type="hidden" name="act" id="act" value="login">
<input type="hidden" name="role" value="al_frame" />
<input type="hidden" name="expire" id="index_expire_input" value="" />
<input type="hidden" name="_origin" value="https://vk.com" />
<input type="hidden" name="ip_h" value="777777777777777777" />
<input type="hidden" name="lg_h" value="555555555555555555" />

Не знаю насколько важны остальные, но главное что нужно вытянуть это “ip_h” и “lg_h”
Параметры добавить к параметрам логин/пароль и отсылать уже на 'https://login.vk.com/?act=login'

И зачем у тебя голая строка session = requests.Session() без продолжения?
Ты либо сам следишь за всеми куками, добавляя, удаляя и отправляя их в запросах, либо используешь сессию и requests уже сам за ними следит в пределах сессии.
И запросы отправлять в сессии
 session.post(url, data=data)

Ну вот на твоём примере авторизация и получение куков (на 2 питоне)
 import requests
import re
def autoriz ():
    username = 'username'
    password = 'password'
    url_1 = 'https://vk.com/'
    url_2 = 'https://login.vk.com/?act=login'
    with requests.Session() as s:
        html = s.get(url_1).content
        # print html.decode('cp1251').encode('cp866', 'ignore')
        matcher = re.compile(r'<input type="hidden" name="(\w+?)".*? value="(.*?)" />')
        data = dict(matcher.findall(html))
        data.update({
                    'email': username,
                    'pass': password
                    })
        login_vk = s.post(url_2, data=data)
        # print login_vk.status_code
        # print login_vk.headers, '\n'
        # print login_vk.text.encode('cp866', 'ignore')
        session_cookies = s.cookies.get_dict(domain='.vk.com')
        print '\nsession_cookies:', session_cookies
        return session_cookies
def main():
    session_cookies = autoriz()
if __name__ == "__main__":
    main()

Отредактировано Vintets (Июль 28, 2017 09:12:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version