HtmlUnit генерирует множество исключений при нажатии одной кнопки

Я пытаюсь создать программу, которая входит в учетную запись Yahoo. Я использую HtmlUnit в Java, но когда программа пытается нажать Войти выдает большое количество различных исключений.

Форма кнопки такая:

<form method="post" action="https://login.yahoo.com/config/login?" autocomplete="" name="login_form" onsubmit="return hash2(this)">
    <input type="hidden" name=".tries" value="1"/>
    <input type="hidden" name=".src" value=""/>
    <input type="hidden" name=".md5" value=""/>
    <input type="hidden" name=".hash" value=""/>
    <input type="hidden" name=".js" value=""/>
    <input type="hidden" name=".last" value=""/>
    <input type="hidden" name="promo" value=""/>
    <input type="hidden" name=".intl" value="us"/>
    <input type="hidden" name=".bypass" value=""/>
    <input type="hidden" name=".partner" value=""/>
    <input type="hidden" name=".u" value="eqn7kn96q7irv"/>
    <input type="hidden" name=".v" value="0"/>
    <input type="hidden" name=".challenge" value="rTRqt.vaVyBEJgxmMpkh0sqYx5Mz"/>
    <input type="hidden" name=".yplus" value=""/>
    <input type="hidden" name=".emailCode" value=""/>
    <input type="hidden" name="pkg" value=""/>
    <input type="hidden" name="stepid" value=""/>
    <input type="hidden" name=".ev" value=""/>
    <input type="hidden" name="hasMsgr" value="0"/>
    <input type="hidden" name=".chkP" value="Y"/>
    <input type="hidden" name=".done" value="http://my.yahoo.com"/>
    <input type="hidden" name=".pd" value="_ver=0&c=&ivt=&sg="/>
    <input type="hidden" name="pad" id="pad" value="3"/>
    <input type="hidden" name="aad" id="aad" value="3"/>
    <div id="inputs">
    <div id="fun"/>
    <div id="persistency">
    <div id="submit">
        <button type="submit" id=".save" name=".save" class="primaryCta" tabindex="5"> Sign In </button>
    </div>
</form>

и мой java-код:

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.Page;
import com.gargoylesoftware.htmlunit.RefreshHandler;
import com.gargoylesoftware.htmlunit.html.HtmlButton;
import java.io.IOException;
import java.net.URL;

public class VirtualWebBrowser {

    public static void clickAuthorizeButton(String url, String login, String password) throws Exception {

        WebClient webClient = new WebClient(BrowserVersion.FIREFOXHtmlPage nextPage = (HtmlPage) signInButton.click();6);
        webClient.setThrowExceptionOnScriptError(false);

        webClient.setRefreshHandler(new RefreshHandler() {
            public void handleRefresh(Page page, URL url, int arg) throws IOException {
                System.out.println("handleRefresh");
            }
        });

        HtmlPage loginPage = (HtmlPage) webClient.getPage(url);
        HtmlForm liginForm = loginPage.getFormByName("login_form");

        liginForm.getInputByName("login").setValueAttribute(login);
        liginForm.getInputByName("passwd").setValueAttribute(password);

        HtmlButton signInButton = liginForm.getButtonByName(".save");
        HtmlPage nextPage = (HtmlPage) signInButton.click();

        webClient.closeAllWindows();
    }
}

Все исключения находятся в строке HtmlPage nextPage = (HtmlPage) signInButton.click();

После этой строки программа регистрируется в учетной записи Yahoo, но все эти исключения так или иначе влияют на всю работу программы, что она работает нестабильно. Что мне делать, чтобы избежать этой ситуации или хотя бы поймать все исключения?


person Martynas    schedule 12.04.2011    source источник
comment
Не могли бы вы предоставить дополнительную информацию о том, какие исключения выбрасываются?   -  person Sasha O    schedule 12.04.2011
comment
Все исключения здесь: paste.ideaslabs.com/show/tQ5Osdrrbe   -  person Martynas    schedule 12.04.2011


Ответы (1)


Судя по вставленным вами ошибкам, это похоже на один из тех случаев, когда реализация HTMLUnit Javascript отличается от реализации в браузере. Я также не удивлюсь, если Yahoo не хочет, чтобы люди выполняли автоматический вход в свои свойства.

Вместо того, чтобы бороться с Javascript здесь, я бы попробовал следующие вещи:

  1. Посмотрите на связь HTTP с помощью анализатора (например, HttpFox) и попробуйте отправить запрос на вход с помощью HTTPURLConnection или HTTPClient.
  2. Посмотрите, можете ли вы войти в систему с помощью API. Я знаю, что Yahoo предоставляет OpenID, они также могут обеспечивать аутентификацию OAuth, см. http://developer.yahoo.com/oauth/
  3. Используйте Selenium для входа в реальный браузер.
person Sasha O    schedule 12.04.2011