java - 使用 HtmlUnit + Java 的虚拟 Web 浏览器提交

标签 java submit htmlunit

我正在尝试使用 HtmlUnit 登录 yahoo.com 。但当我的程序尝试单击“登录”按钮时,它不起作用。我的代码是:

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>

最佳答案

我对 HtmlUnit 一无所知,但从错误消息来看,它似乎在搜索某个带有 value 的元素。属性,而你的按钮没有这样的属性。也许byName或者这样的?它不是 <input>元素,但是一个<button>元素,所以可能类似于 getButtonByName(".save")

编辑:我找到了 Javadoc,看来我猜对了方法名称:-p

关于java - 使用 HtmlUnit + Java 的虚拟 Web 浏览器提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5601639/

相关文章:

javascript - 将数据从文本框提交到 Firebase 不起作用

java - XPath 转义字符 (HtmlUnit)

HtmlUnit - 动态加载的 JavaScript 未运行

primefaces - 使用 Webdriver 进行 PrimeFaces 文件上传

java - 为什么我在进行 spring-security jdbc 身份验证时遇到错误?

java - 20 字节的蓝牙 LE 数据 JSON

php - 如何防止在PHP中多次点击提交多个表单

jquery - 使用 PreventDefault() 时如何在单击按钮时提交表单?

java - 使用 Java 解析具有多行标题的 CSV

java - 尝试从另一个对象引用变量(JAVA)