tags:

views:

655

answers:

4

I want to login to ORKUT through a java progrram without involving IE or Firefox,

I am using HTMLUnit for this in the following manner:

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput;
import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput;

public class HtmlUnit {
public void submittingForm() throws Exception {
    final WebClient webClient = new WebClient();

    // Get the first page
    final HtmlPage page1 = webClient.getPage("https://www.google.com/accounts/ServiceLogin?service=orkut&hl=en-US&rm=false&continue=http%3A%2F%2Fwww.orkut.com%2FRedirLogin%3Fmsg%3D0%26page%3Dhttp%253A%252F%252Fwww.orkut.co.in%252FHome.aspx&cd=IN&passive=true&skipvpage=true&sendvemail=false");
    System.out.println("Page1: " + page1.toString());

    // 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 HtmlSubmitInput button = page1.getElementByName("signIn");
    final HtmlTextInput userName = page1.getElementByName("Email");
    final HtmlPasswordInput password = page1.getElementByName("Passwd");

    // Change the value of the text field
    userName.setValueAttribute("username");
    password.setValueAttribute("password");

    // Now submit the form by clicking the button and get back the second page.
    final HtmlPage page2 = button.click();
    System.out.println("Page2: " + page2.toString());
}

public static void main(String[] args) {
    try {
        new HtmlUnit().submittingForm();
    }catch(Exception ex) {
        ex.printStackTrace();
    }
}
}

But after running the above program, I got the following error:

Page1: HtmlPage(https://www.google.com/accounts/ServiceLogin?service=orkut&hl=en-US&rm=false&continue=http%3A%2F%2Fwww.orkut.com%2FRedirLogin%3Fmsg%3D0%26page%3Dhttp%253A%252F%252Fwww.orkut.co.in%252FHome.aspx&cd=IN&passive=true&skipvpage=true&sendvemail=false)@6011238

Sep 15, 2009 4:54:37 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://static1.orkut.com/js/gen/in_frame046.js', but got 'application/x-javascript'.
Sep 15, 2009 4:54:38 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://static1.orkut.com/js/gen/gtalk_client031.js', but got 'application/x-javascript'.
Sep 15, 2009 4:54:38 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify
WARNING: Expected content type of 'application/javascript' or 'application/ecmascript' for remotely loaded JavaScript element at 'http://static1.orkut.com/ifpc/ifpc.js', but got 'application/x-javascript'.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at net.sourceforge.htmlunit.corejs.javascript.ObjToIntMap.rehashTable(ObjToIntMap.java:330)
    at net.sourceforge.htmlunit.corejs.javascript.ObjToIntMap.ensureIndex(ObjToIntMap.java:415)
    at net.sourceforge.htmlunit.corejs.javascript.ObjToIntMap.intern(ObjToIntMap.java:197)
    at net.sourceforge.htmlunit.corejs.javascript.TokenStream.getToken  (TokenStream.java:435)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.peekToken(Parser.java:313)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.variables(Parser.java:1791)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.statementHelper         (Parser.java:959)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.statement(Parser.java:877)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.parse(Parser.java:549)
    at net.sourceforge.htmlunit.corejs.javascript.Parser.parse(Parser.java:492)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileImpl(Context.java:2404)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileString(Context.java:1375)
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory$TimeoutContext.compileString(HtmlUnitContextFactory.java:173)
    at net.sourceforge.htmlunit.corejs.javascript.Context.compileString(Context.java:1364)
    at com.gargoylesoftware.htmlunit.javascript.host.Window.custom_eval(Window.java:1143)
    at com.gargoylesoftware.htmlunit.javascript.host.Window.jsxFunction_execScript(Window.java:1122)
    at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at net.sourceforge.htmlunit.corejs.javascript.MemberBox.invoke(MemberBox.java:161)
    at net.sourceforge.htmlunit.corejs.javascript.FunctionObject.call(FunctionObject.java:476)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpretLoop(Interpreter.java:1688)
    at net.sourceforge.htmlunit.corejs.javascript.Interpreter.interpret(Interpreter.java:845)
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.call(InterpretedFunction.java:164)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.doTopCall(ContextFactory.java:427)
    at com.gargoylesoftware.htmlunit.javascript.HtmlUnitContextFactory.doTopCall(HtmlUnitContextFactory.java:263)
    at net.sourceforge.htmlunit.corejs.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3058)
    at net.sourceforge.htmlunit.corejs.javascript.InterpretedFunction.exec(InterpretedFunction.java:175)
    at com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$5.doRun(JavaScriptEngine.java:415)
    at                 com.gargoylesoftware.htmlunit.javascript.JavaScriptEngine$HtmlUnitContextAction.run(JavaScriptEngine.java:520)
    at net.sourceforge.htmlunit.corejs.javascript.Context.call(Context.java:529)
    at net.sourceforge.htmlunit.corejs.javascript.ContextFactory.call(ContextFactory.java:536)

So, I don't understand where the problem is. The error occurs while executing the following line:

final HtmlPage page2 = button.click();
+4  A: 

The name of error gives a hint: the Java virtual machine needs more memory. You can increase heap space by adding the flag '-Xmx128M' to the jvm (or increasing the integer value just in case, the java call already has a Xmx parameter with a smaller value.

With the example above you'll have 128 MByte heap space.

Andreas_D
Well, the problem was with "https", It was working fine with "http" protocol. There was no problem of heap space in actual.
Yatendra Goel
+2  A: 

Try increasing the amount of heap space you are launching your application with; e.g.

java -Xmx256M ...
Adamski
Is this command shorthand for -Xmx or is this for an older JDK? I tried it and it works with Java 6, but it changes it to -Xmx.
hoffmandirt
Ha! No, it's just a typo on my part - Surprised it worked on Java 6!
Adamski
+2  A: 

I think you need to find out what happens on clicking submit/sign-in because I doubt the jvm should run out of memory while doing this. Maybe it goes in some kind of an infinite loop and keeps downloading data? Maybe Google's sign-in recognizes when a non browser tries logging in?

rohit.arondekar
A: 

You might also need to increase permSize at some point... so use the following to avoid both:

java -Xmx512m -XX:MaxPermSize=256m ...

Daniel Bleisteiner
Why was this answer downvoted?
TwentyMiles
maybe because it suggests settings not necessarily needed.
Daniel Bleisteiner