2016-07-11 11 views
0

Ich versuche mich über HtmlUnit bei Google Acccount anzumelden, aber immer noch stimmt etwas nicht und ich bekomme die Anmeldeseite. Was mache ich falsch?Melden Sie sich mit HtmlUnit beim Google-Konto an.

  1. Set E-Mail
  2. klicken Sie auf Weiter
  3. Set Passwort
  4. Klicken Sie auf Login-Button
  5. Zum GMail Seite und es ist immer noch Login-Seite (Ausgang unten)

Mein Beispielcode :

 WebClient client = new WebClient(BrowserVersion.CHROME); 
     client.setHTMLParserListener(HTMLParserListener.LOG_REPORTER); 
     client.setJavaScriptEngine(new JavaScriptEngine(client)); 
     client.getOptions().setJavaScriptEnabled(true); 
     client.getCookieManager().setCookiesEnabled(true); 
     client.getOptions().setThrowExceptionOnScriptError(false); 
     client.getOptions().setThrowExceptionOnFailingStatusCode(false); 
     client.setAjaxController(new NicelyResynchronizingAjaxController()); 
     client.getCache().setMaxSize(0); 
     client.getOptions().setRedirectEnabled(true); 

     String url = "https://accounts.google.com/login?hl=en#identifier"; 
     HtmlPage loginPage = client.getPage(url); 
     client.waitForBackgroundJavaScript(1000000); 

     HtmlForm loginForm = loginPage.getFirstByXPath("//form[@id='gaia_loginform']"); 
     List<HtmlInput> buttonInputs = loginForm.getInputsByValue("signIn"); 
     HtmlInput nextButton = Iterables.getFirst(buttonInputs, null); 
     HtmlInput loginButton = Iterables.getLast(buttonInputs); 
     Thread.sleep(2000); 

     //setup email 
     HtmlInput emailInput = loginForm.getInputByName("Email"); 
     emailInput.setValueAttribute(emailAddress); 
     Thread.sleep(2000); 

     //click next button 
     nextButton.click(); 
     client.waitForBackgroundJavaScript(1000000); 
     Thread.sleep(2000); 

     //setup password 
     HtmlInput passwordInput = loginForm.getInputByName("Passwd"); 
     passwordInput.setValueAttribute(password); 

     //click login button 
     loginButton.click(); 
     client.waitForBackgroundJavaScript(1000000); 
     Thread.sleep(2000); 

     HtmlPage gmailPage = client.getPage("https://mail.google.com/mail/u/0/#inbox"); 
     log.info(gmailPage.asText()); 

nach allem, was ich bin immer Ausgang

2016-07-12 01:36:47 INFO GoogleAccountClient:91 - Gmail 

One account. All of Google. 
Sign in to continue to Gmail 

Next Need help? 

Sign inchecked 

Create account 
One Google Account for everything Google 

About Google 
Privacy 
Terms 
Help 

‪English (United States)‬ 

identifier 

ich etwas offensichtlich vergessen?

I tryied auch Schaltflächen klicken, indem du JavaScript

loginPage.executeJavaScript("document.getElementById('next').click()"); 
loginPage.executeJavaScript("document.getElementById('signIn').click()"); 
+0

Nun, es scheint, Google Login löst viele Weiterleitungen aus. Ich schlage vor, dass Sie die aktuelle Seiten-URL ausdrucken, um zu sehen, wo Sie sich befinden, und im Inkognito-Modus mit Ihrem bevorzugten Browser zu vergleichen. Es ist sogar möglich, dass Sie bei Google angemeldet sind. Sie können auch versuchen, zu einer authentifizierten Seite (in der Regel GMail) zu navigieren, um zu sehen, ob Sie verboten sind oder nicht. – Riduidel

+0

Sehen Sie sich die letzten 2 Zeilen an 'HtmlPage gmailPage = client.getPage (" https://mail.google.com/mail/u/0/#inbox ");' 'log.info (gmailPage.asText()) ; ' Ich umadressieren Client nach alle auf Google Mail-Seite, und ich bekomme Ausgabe, die Login-Seite ist –

+0

@ Jakub_Pomykała Mein schlechtes. Haben Sie versucht, einen HTTP-Proxy zu verwenden, um zu sehen, welche HTTP-Anfragen zwischen HtmlUnit und Google ausgetauscht werden? Vielleicht finden Sie bei der Anmeldung einige interessante Unterschiede zu Ihrem Browser. – Riduidel

Antwort

0

Ich denke, was Sie falsch gemacht haben war, als Sie für die „nächste“ gesucht haben und die „Zeichen in“ Tasten.

Ich bin mir ziemlich sicher, dass Sie tun müssen: List<HtmlInput> buttonInputs = loginForm.getInputsByName("signIn");

Stattdessen setzen Sie List<HtmlInput> buttonInputs = loginForm.getInputsByValue("signIn");

was da nicht stimmt sowohl mit den Tasten den gleichen Namen von „Signin“ haben wenn der "nächste Knopf" einen Wert von von "Next" hat und der "Anmelden" Knopf einen Wert von "Anmelden" hat.