理论:不确定这是否与站点重定向有关,因为当我(我是物理登录)时,openID窗口关闭,原始窗口被转发到幻想页面。
import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.junit.Test;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.CookieManager;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
public class pageGrabber extends TestCase {
@Test
public void testGoogle() throws FailingHttpStatusCodeException, MalformedURLException, IOException{
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
CookieManager cm = new CookieManager();
cm.setCookiesEnabled(true);
webClient.setCookieManager(cm);
final HtmlPage page = webClient.getPage("https://accounts.google.com/ServiceLogin?service=lso&continue=https://accounts.google.com/o/openid2/auth?zt%3DChQ0RExRRjBINXZvd0hfNE5UcjcyYhIfMHZ2TXYtTkpsc2tiTXFUbUhqeVRGR1BxejBfTmlBSQ%25E2%2588%2599APsBz4gAAAAAUwv0r-GHODUgm8z7qyiJMR2n6vRkrQQZ%26from_login%3D1%26hl%3Den-US%26as%3D5c29d1e6186004c9<mpl=popup&shdf=ChILEgZkb21haW4aBllhaG9vIQwSA2xzbyIUeOFO0MZJCAehMIDrHDhgU0wjl6MoATIUOlhjH8DZwwDjkCeSuuffbdnYH5g&hl=en-US&sarp=1&scc=1&authuser=0");
Assert.assertEquals("Sign in - Google Accounts", page.getTitleText());
String text = page.asText();
System.out.println(text);
//select Form and fill it out
List<HtmlForm> listOfForms = new ArrayList<HtmlForm> ();
listOfForms= page.getForms();
final HtmlForm form = listOfForms.get(0);
final HtmlSubmitInput button = form.getInputByName("signIn");
final HtmlPasswordInput password = form.getInputByName("Passwd");
final HtmlTextInput email = form.getInputByName("Email");
email.setValueAttribute("xxx@gmail.com");
password.setValueAttribute("xxxxxxxx");
final HtmlPage page2= button.click();
String text2 = page2.asText();
System.out.println(text2);
Assert.assertEquals("Yahoo Sports Fantasy Basketball - Two Years After - Retro Ballers", page2.getTitleText());
webClient.closeAllWindows();
}
}
和堆栈跟踪
com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 400 Bad Request for https://accounts.google.com/o/openid2/auth?zt=ChQ0RExRRjBINXZvd0hfNE5UcjcyYhIfMHZ2TXYtTkpsc2tiTXFUbUhqeVRGR1BxejBfTmlBSQ%E2%88%99APsBz4gAAAAAUwv0r-GHODUgm8z7qyiJMR2n6vRkrQQZ&from_login=1&hl=en-US&as=5c29d1e6186004c9&auth=DQAAAIcAAABmwdTaHvzgHJvQiSH_InslYqP05WKBypJv8wOtm2SHdHFtu2zIgPBMmbExjpNNoZYg07HK-PD4jITMIvgyStIol1-lMt4RQEahUlGEhXTmwO8CftNVp82jLofISVva2cyqhnvX2AvMRp7Dztg8IdobV05DukBIX2vtLgx1WPR8Qie7ehjIKvcot-ugd945ZlA
at com.gargoylesoftware.htmlunit.WebClient.throwFailingHttpStatusCodeExceptionIfNecessary(WebClient.java:514)
at com.gargoylesoftware.htmlunit.WebClient.loadDownloadedResponses(WebClient.java:2067)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:717)
at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.processPostponedActions(JavaScriptEngine.java:804)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1322)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1265)
at com.gargoylesoftware.htmlunit.html.HtmlElement.click(HtmlElement.java:1213)
at com.Frido.NBA.pageGrabber.testGoogle(pageGrabber.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)