отправка через виртуальный веб-браузер с использованием HtmlUnit + Java - PullRequest
0 голосов
/ 09 апреля 2011

Я пытаюсь войти в yahoo.com, используя HtmlUnit . Но это не работает, когда моя программа пытается нажать кнопку «Войти». Мой код:

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

public class MyBrowser {

    public void homePage() throws Exception {


        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
        webClient.setThrowExceptionOnScriptError(false);

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

        });

        HtmlPage page = (HtmlPage) webClient.getPage("https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.done=http%3A%2F%2Fwww.yahoo.com%2F");
        HtmlForm form = page.getFormByName("login_form");

        form.getInputByName("login").setValueAttribute("@@@@@@");  // works OK
        form.getInputByName("passwd").setValueAttribute("@@@@@@"); // works OK
        page = (HtmlPage) form.getInputByValue("Sign In").click(); // doesn't work

        webClient.closeAllWindows();
    }

}

Ошибка:

com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[input] attributeName=[value] attributeValue=[Sign In]
        at com.gargoylesoftware.htmlunit.html.HtmlForm.getInputByValue(HtmlForm.java:737)

Форма:

<form method="post" action="https://login.yahoo.com/config/login?" autocomplete="" name="login_form" onsubmit="return hash2(this)">
    ...
    <div id="submit">
        <button type="submit" id=".save" name=".save" class="primaryCta" tabindex="5"> Sign In </button>
    </div>
</form>

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Я ничего не знаю о HtmlUnit, но из сообщения об ошибке похоже, что он ищет какой-то элемент с атрибутом value, а ваша кнопка не имеет такого атрибута.Может быть byName или такой?И это не элемент <input>, а элемент <button>, так что может быть что-то вроде getButtonByName(".save")?

Редактировать: Я нашел Javadoc, и, кажется, я угадал методимя справа: -p

0 голосов
/ 14 марта 2013

Кнопка отправки формы входа в Yahoo имеет спецификацию имени, а не спецификацию значения.Вам нужно получить вход по имени.Я предлагаю вам изменить:

page = (HtmlPage) form.getInputByValue("Sign In").click();

... на ...

page = (HtmlPage) form.getInputByName("Sign In").click();
...