alex5e
@alex5e

Как эмулировать авторизацию на чужом сайте через ВКонтакте?

Добрый день. Столкнулся с проблемой при эмуляции авторизации на сайте через виджет ВКонтакте. Использую java и htmlUnit. Проблема заключается в следующем. При заходе на сайт выполняется клик по кнопке для входа через ВК, появляется всплывающее окно 1fc9f9dbd0014224b34741cbc5ea4b3d.PNG
В браузере после клика на кнопку "Разрешить" окно закрывается и страница (на которой выполнялся логин) обновляется. В htmlUnit после клика на кнопку "Разрешить". приложение устанавливается, но логина на сайте не происходит. (после обновления страницы пользователь также остается незалогинен).

String applicationName = "Mozilla";
String applicationVersion = "5.0";
String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0";
int browserVersionNumeric = 35;
BrowserVersion Mozilla35 = new BrowserVersion(applicationName, applicationVersion, userAgent, browserVersionNumeric);
                    
WebClient likesFm = new WebClient(Mozilla35);
likesFm.addRequestHeader("Accept-Language", "ru");
likesFm.setJavaScriptTimeout(10*1000);
likesFm.getOptions().setCssEnabled(false);
likesFm.getOptions().setRedirectEnabled(true);
likesFm.getOptions().setThrowExceptionOnScriptError(false);
likesFm.getOptions().setGeolocationEnabled(true);
likesFm.getOptions().setUseInsecureSSL(true);
likesFm.setAjaxController(new NicelyResynchronizingAjaxController());
likesFm.getCookieManager().setCookiesEnabled(true);
likesFm.getOptions().setJavaScriptEnabled(true);
likesFm.getOptions().setThrowExceptionOnFailingStatusCode(false);
likesFm.getOptions().setTimeout(60*1000);
likesFm.getOptions().setPopupBlockerEnabled(false);
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); 
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF); 
System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
HtmlPage vkPage = likesFm.getPage(new WebRequest(new URL("https://vk.com/"), HttpMethod.POST));
final HtmlForm vkForm = vkPage.getFormByName("login");
final HtmlSubmitInput vkButton = (HtmlSubmitInput)vkForm.getFirstByXPath("//*[@id=\'quick_login_form\']/input[8]");
final HtmlTextInput vkEmail = vkForm.getInputByName("email");
final HtmlPasswordInput vkPass = vkForm.getInputByName("pass");
vkEmail.setValueAttribute(this.login);
vkPass.setValueAttribute(this.pass);
/* Залогинились ВКонтакте */
final HtmlPage pageLoginVk = vkButton.click();
 /* Логинимся на сайте */
final HtmlPage likes = likesFm.getPage("https://likes.fm/");   
System.out.println(likesFm.getCurrentWindow().getEnclosedPage());
final HtmlButton oauth = likes.getFirstByXPath("/html/body/div[3]/div[1]/div[1]/button");
//ВКонтакте | Разрешение доступа
final HtmlPage oauthres = oauth.click();
System.out.println(likesFm.getCurrentWindow().getEnclosedPage());
final HtmlButton oauth2;
final HtmlPage oauthres2;
if(oauthres.getTitleText().contains("ВКонтакте")) {  
        oauth2 = oauthres.getFirstByXPath("//*[@id=\"install_allow\"]");
        oauthres2 = oauth2.click();
} else {
        String parameterss = likesFm.getCookieManager().getCookies().toString();
        System.out.println(parameterss);
        likesFm.waitForBackgroundJavaScript(1000);
        likesFm.waitForBackgroundJavaScriptStartingBefore(1000);
}
System.out.println(oauthres.getBody().asText());
final HtmlPage likes1 = likesFm.getPage("https://likes.fm/");
System.out.println(likes1.getBody().asText());

Может кто делал что нибудь подобное? Подскажите..
  • Вопрос задан
  • 3166 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы