LINUX.ORG.RU

Авторизация во вконтактике без участия пользователя

 , , ,


0

1
WebDriver driver = new HtmlUnitDriver(true); // (true) включает js
   driver.get(url);
    List<WebElement> edits = driver.findElements(By.className("form_input")); // поиск полей для заполнения логина и пароля
    edits.get(0).click(); // фокус на поле логина
    edits.get(0).sendKeys(login); // ввод логина
    edits.get(1).click(); // то же самое с паролем
    edits.get(1).sendKeys(password);
    driver.findElement(By.id("install_allow")).click(); // клик по кнопке подтверждения
    // происходит редирект сюда http://pastebin.com/wATWDWi3
    // страница с подтверждением прав приложения
    driver.findElement(By.id("install_allow")).click(); // клик по кнопке, подтверждающей права приложения. Игнорируется, хоть ты до посинения кликай

Интересно, что если не включать js, то вместо страницы с подтверждением прав приложения происходит редирект сразу на выбранную в get запросе страницу с добавлением токена в url, т.е. пропускается этап подтверждения прав. Было бы наплевать, но в таком случае приложение не имеет прав вообще ни на что — надо как-то исправить.

UPD: во время авторизации пользователя дергать нельзя, все должно делаться автоматически, т.е. вариант с открытием окна браузера, который продвигает вконтактик, мне не подходит.

★★★★★

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

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от vertexua

Я уже вроде бы описал задачу, но ладно: есть логин и пароль, необходимо авторизоваться во вконтактике, чтобы потом дергать разнообразные ф-и из его api. Для доступа к ф-м нужно подтвердить все пермишены, это делается на этапе авторизации. Если я этого не сделаю, то почти все крутые методы из вконтактого api будут для приложения закрыты.

f1xmAn ★★★★★ ()
Последнее исправление: f1xmAn (всего исправлений: 1)
Ответ на: комментарий от f1xmAn

Нет, но когда переходишь на страницу, он сам всё заполняет. Страница с подтверждением авторизации на пару сек. появляется и исчезает.

ArturK ()
Ответ на: комментарий от f1xmAn

Ты я думаю хорошо понимаешь что это не вписывается в нормальный способ использования Vkontakte, и более похоже на злонамеренный. А исходя из этого не думай что ты первый такой умный и придумал дергать кнопочки селениумом. Я уверен что в проектировании браузеров, веб-стандартов, селениума или вконтакта где-то учтен твой случай и у тебя ничего не выйдет. Хотя бы взять твой вызов click() ;)

Почему нельзя явно запросить permissions у пользователя и потом дергать API сколько влезет?

Если у тебя веб-приложение, то тогда доступна только часть API. Но если у тебя десктоп-приложение и ты можешь себе позволить встроить WebKit, тогда есть специальный способ авторизации и у тебя открывается все API, как для standalone приложения.

vertexua ★★★★★ ()
Последнее исправление: vertexua (всего исправлений: 3)

Я тоже не очень понял use-case. Если это нужно только для 1 юзера, то ты можешь сам, вручную, проинсталлить приложение, получить токен и делать от него запросы.
Если же это нужно для произвольного юзера, то пусть он сам вводит логин и пароль.

kovrik ★★★★★ ()
Ответ на: комментарий от f1xmAn

Кстати, откуда у тебя имя пользователя и пароль? Если твои, то разреши приложение и не парься. Если чужие, то в 2013 году при существовании Oauth не прилично просить у пользователя его пароль

vertexua ★★★★★ ()
Ответ на: комментарий от vertexua

Как же вы заколебали, любой вопрос про авторизацию тут встречается под возгласом «Привет кульхацкерам!». Привет, господа девелоперы, безумно рад встрече. Мое приложение предназначено для автоматизации последовательности действий, типа ifttt. На данном этапе разработки пользователь описывает свои процессы в xml файле вместе со всеми паролями к сервисам, а приложение уже колдует над этим описанием и _автоматически_ авторизуется, слушает сервисы и выполняет необходимые действия.

f1xmAn ★★★★★ ()

Даже гугл в своих нативных приложениях использует веб-авторизацию, а не прямой ввод пароля.

note173 ★★★★★ ()
Ответ на: комментарий от kovrik

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

f1xmAn ★★★★★ ()
Ответ на: комментарий от kovrik

И все делается 1 запросом, никакие формы заполнять не надо

kovrik ★★★★★ ()
Ответ на: комментарий от f1xmAn

А что если тебе дать пользователю конфигурялку xml, которая все пермишны получает от него самого и в конфиг уже token (и refresh_token по необходимости) записывает. А далее ты действия уже по токенам выполняешь?

RedPossum ★★★★★ ()
Ответ на: комментарий от f1xmAn

приложение должно один раз взять у пользователя задание и годами его выполнять, не спрашивая никаких подтверждений.

прочитай про обновление токенов по oauth2.

RedPossum ★★★★★ ()
Ответ на: комментарий от kovrik

Нужно сначала получить одобрение от вконтактеров, а там довольно жесткие условия, с которыми возится нет ни времени, ни желания.

f1xmAn ★★★★★ ()
Ответ на: комментарий от RedPossum

Хм, а этот вариант уже имеет право на жизнь. Но пользователю удобнее будет просто записать свой логин с паролем. С другой стороны это менее безопасно. Во всяком случае, имхо, это очень годный запасной вариант.

f1xmAn ★★★★★ ()
Ответ на: комментарий от vertexua

это не вписывается в нормальный способ использования Vkontakte

Почему?

Я, правда, не разбирался пока с АПИ вк и иже с ним, но чот мне не кажется противоестественным запрос на авторизацию из стороннего приложения.

Надеюсь, я понял ТС.

Deleted ()
Ответ на: комментарий от Deleted

Ок, нельзя смешивать все в кучу. Есть запрос на авторизацию, а есть попытка автоматизации получения авторизации путем эмуляции нажимания кнопок мыши с помощью инструментов тестирования и хранение непосредственно пароля пользователя

vertexua ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.