Besoin d'aide connectez vous à mon compte yahoo mail en utilisant Htmlunit en java


J'ai besoin d'aide pour essayer de me connecter à mon e-mail Yahoo, en utilisant Htmlunit en java. Je reçois des erreurs, je suis vraiment nouveau sur Htmlunit. J'ai entendu dire que c'est le meilleur outil à utiliser pour le grattage d'écran et pour que je puisse faire du grattage d'écran, je dois me connecter à mon intranet, mais je m'entraîne à utiliser mon yahoo mail. S'il vous plaît aider!!

import java.net.*;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.*;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;


public class HtmlDelete {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
    HtmlDelete main = new HtmlDelete();
    try {
        main.submittingForm();
    } catch (Exception ex) {
        Logger.getLogger(HtmlDelete.class.getName()).log(Level.SEVERE, null, ex);       }
    }

    public void submittingForm() throws Exception {
    final WebClient webClient = new WebClient();
    //webClient.setJavaScriptEnabled(false);
    // Get the first page
    final HtmlPage page1 = webClient.getPage("https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym");

    // Get the form that we are dealing with and within that form,
    // find the submit button and the field that we want to change.
    final HtmlForm form = page1.getFormByName("login_form");

    //final HtmlSubmitInput button = form.getInputByName("subbtn");
    final HtmlSubmitInput button = page1.getHtmlElementById(".save");
    final HtmlTextInput loginName = form.getInputByName("login");
    final HtmlPasswordInput loginPs = form.getInputByName("passwd");

    // Change the value of the text field
    loginName.setValueAttribute("[email protected]");
    loginPs.setValueAttribute("exxxxx5");

    // Now submit the form by clicking the button and get back the second page.
    final HtmlPage page2 = button.click();
    final String pageAsXml = page2.asText();
    System.out.println(pageAsXml);
    //webClient.closeAllWindows();
    }
}

Sortie

    Jun 19, 2013 9:31:47 AM com.att.temp.HtmlDelete main
    SEVERE: null
    ======= EXCEPTION START ========
    Exception class=[net.sourceforge.htmlunit.corejs.javascript.WrappedException]
    com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:228)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:813)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:737)
        at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:867)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:872)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1268)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:237)
        at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:441)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
        at com.att.temp.HtmlDelete.submittingForm(HtmlDelete.java:34)
        at com.att.temp.HtmlDelete.main(HtmlDelete.java:24)

    Inside wrapped exception:
    ======= EXCEPTION START ========
    Exception class=[net.sourceforge.htmlunit.corejs.javascript.WrappedException]
    com.gargoylesoftware.htmlunit.ScriptException: Wrapped com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeListeners(EventListenersContainer.java:293)
        at com.gargoylesoftware.htmlunit.javascript.host.Window.executeEvent(Window.java:1975)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.executeEvent(Node.java:725)
        at com.gargoylesoftware.htmlunit.html.HtmlScript.setAndExecuteReadyState(HtmlScript.java:535)
        at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:261)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:714)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:91)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:664)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:228)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:813)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:737)
        at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:867)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:872)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1268)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:237)
        at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:441)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
        at com.att.temp.HtmlDelete.submittingForm(HtmlDelete.java:34)
        at com.att.temp.HtmlDelete.main(HtmlDelete.java:24)

    ======= EXCEPTION START ========
    Exception class=[net.sourceforge.htmlunit.corejs.javascript.JavaScriptException]
    com.gargoylesoftware.htmlunit.ScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:669)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.execute(JavaScriptEngine.java:555)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.loadExternalJavaScriptFile(HtmlPage.java:1082)
        at com.gargoylesoftware.htmlunit.html.HtmlScript.executeScriptIfNeeded(HtmlScript.java:399)
        at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:260)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:714)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:91)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:664)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeListeners(EventListenersContainer.java:293)
        at com.gargoylesoftware.htmlunit.javascript.host.Window.executeEvent(Window.java:1975)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.executeEvent(Node.java:725)
        at com.gargoylesoftware.htmlunit.html.HtmlScript.setAndExecuteReadyState(HtmlScript.java:535)
        at com.gargoylesoftware.htmlunit.html.HtmlScript$3.execute(HtmlScript.java:261)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.doProcessPostponedActions(JavaScriptEngine.java:714)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.access$500(JavaScriptEngine.java:91)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:664)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:601)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine.callFunction(JavaScriptEngine.java:576)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeJavaScriptFunctionIfPossible(HtmlPage.java:1005)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeEventHandler(EventListenersContainer.java:208)
        at com.gargoylesoftware.htmlunit.javascript.host.EventListenersContainer.executeBubblingListeners(EventListenersContainer.java:228)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:813)
        at com.gargoylesoftware.htmlunit.javascript.host.Node.fireEvent(Node.java:737)
        at com.gargoylesoftware.htmlunit.html.HtmlElement$1.run(HtmlElement.java:867)
        at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:601)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:507)
        at com.gargoylesoftware.htmlunit.html.HtmlElement.fireEvent(HtmlElement.java:872)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.executeEventHandlersIfNeeded(HtmlPage.java:1268)
        at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:237)
        at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:441)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374)
        at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359)
        at com.att.temp.HtmlDelete.submittingForm(HtmlDelete.java:34)
        at com.att.temp.HtmlDelete.main(HtmlDelete.java:24)
    Caused by: net.sourceforge.htmlunit.corejs.javascript.JavaScriptException: TypeError: Cannot call method "one" of null (https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js#8)
        at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1006)
        at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:798)
        at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:105)
        at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
        at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:275)
        at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3031)
        at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:115)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$3.doRun(JavaScriptEngine.java:546)
        at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:654)
        ... 44 more
    JavaScriptException value = TypeError: Cannot call method "one" of null
    ======= EXCEPTION END ========
    == CALLING JAVASCRIPT ==

      function () {
          if (this.readyState == "loaded" || this.readyState == "complete") {
          loadUHJS();
          }
      }

    ======= EXCEPTION END ========
    == CALLING JAVASCRIPT ==

      function () {
          var seedfile = "https://s.yimg.com/lq/lib/yui-ssl/3.4.1/build/yui/yui-min.js";
          var yui3 = document.createElement("script");
          yui3.type = "text/javascript";
          yui3.id = "seedfile";
          yui3.src = seedfile;
          var head = document.getElementsByTagName("head")[0];
          head.appendChild(yui3);
          yui3.onload = function () {
          loadUHJS();
          };
          yui3.onreadystatechange = function () {
          if (this.readyState == "loaded" || this.readyState == "complete") {
              loadUHJS();
          }
          };
          loadUHJS = function () {
          YUI({combine: true, comboBase: "https://s.yimg.com/lq/combo?", root: "yui-ssl/3.4.1/build/"}).use("node", "event", "event-mouseenter", "substitute", "oop", "node-focusmanager", function (Y) {
          });
          var hdJS = document.createElement("script");
          hdJS.type = "text/javascript";
          hdJS.src = "https://s.yimg.com/zz/combo?kx/ucs/sts/js/442/skip-min.js&kx/ucs/uh/js/279/timestamp_library-min.js&kx/ucs/menu_utils/js/164/menu_utils_v2-min.js&kx/ucs/uh/js/267/aria_toolbar-min.js&kx/ucs/username/js/43/user_menu-min.js&kx/ucs/help/js/41/help_menu-min.js&kx/ucs/utility_link/js/20/utility_menu-min.js&kx/ucs/uh/js/262/logo_debug-min.js";
          head.appendChild(hdJS);
          };
      }

    ======= EXCEPTION END ========
Author: Gio, 2013-06-19

1 answers

C'est un peu étrange, mais l'analyseur DOM par défaut n'est pas satisfait du JS qui était exécuté sur la page. En utilisant htmlunit-2.12, je viens d'ajouter une version de navigateur spécifique (WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17)) et de l'exécuter. Voir l'exemple de code:

Ajouter ce qui suit (Remarque, j'ai désactivé l'excès WARNINGS):

import com.gargoylesoftware.htmlunit.BrowserVersion;
----
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);

WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);

// Get the first page
HtmlPage page1 = webClient.getPage("https://login.yahoo.com/config/login_verify2?.intl=us&.src=ym");

System.out.println(page1.getTitleText());

Qui a produit:

Yahoo! Mail: Le meilleur e-mail basé sur le Web!


EDIT: il y avait quelques erreurs qui ont été répertoriées (qui n'étaient pas répertoriées sur le question originale). Les erreurs dans la question sont des harengs rouges. Une fois que vous vous débarrassez de tout le bruit, vous obtenez ce qui suit:

SEVERE: runtimeError: message=[innerHTML is read-only for tag table]

Et

Cannot find function attachEvent in object [object Window]
 3
Author: kgdesouz, 2013-06-19 17:34:34