目標頁面表單結構:
<form>
<input name="username" />
<input name="password" />
<button class="btn-submit" type="submit">登錄</button> <!-- 無 id、無 name -->
</form>
文本框可通過 getInputByName() 定位,但提交按鈕僅有 class="btn-submit"。
HtmlButton submitBtn = form.getByXPath("//button[@class='btn-submit']").get(0);
submitBtn.click();
或更精確://form//button[contains(@class,'btn-submit') and @type='submit']
HtmlButton submitBtn = form.querySelector("button.btn-submit[type=submit]");
submitBtn.click();
for (HtmlElement el : form.getElementsByTagName("button")) {
if ("submit".equals(el.getAttribute("type"))
&& el.getAttribute("class").contains("btn-submit")) {
((HtmlButton)el).click();
break;
}
}
// 兼容 input[type=submit]
for (HtmlElement el : form.getElementsByTagName("input")) {
if ("submit".equals(el.getAttribute("type"))) {
((HtmlSubmitInput)el).click();
break;
}
}
public static void submitForm(HtmlForm form, String buttonClassContains) {
// 優先查找 button
List<HtmlElement> buttons = form.getByXPath(
".//button[contains(@class, '" + buttonClassContains + "') and @type='submit']");
if (!buttons.isEmpty()) {
((HtmlButton)buttons.get(0)).click();
return;
}
// 退而求其次查找 input[type=submit]
List<HtmlElement> inputs = form.getByXPath(
".//input[@type='submit' and contains(@class, '" + buttonClassContains + "')]");
if (!inputs.isEmpty()) {
((HtmlSubmitInput)inputs.get(0)).click();
return;
}
// 最後嘗試直接提交表單(繞過按鈕)
form.submit();
}
webClient.waitForBackgroundJavaScript(5000)<div> 包裹層中,XPath 用 //form//button 而非 /form/buttontype='submit' + 位置特徵(如「表單最後一個按鈕」)