Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Retrieve Browser state information(Java)

  1. Jul 19, 2012 #1
    I'm working on a program that automatically fills forms out on a website for work. It uses the tab key to navigate the page to the different fields. However I do not know how to make it pause for the browser to load the page other than hardcoding some time into it. Is there a way to determine when the browser has finished loading a page in java? For example if the program fills out a page and needs to navigate to the next page, I would like it to wait until the browser is finished loading the next page before continuing to populate fields without having to use some set time. This is important because some page navigations are variable and take up to a few minutes.

    Also if some fields do not fit the specifications of the website then a message will pop up informing the user that the data entered into the fields is invalid. Is there a way to set some sort of listener for if this happens? I would like to make the program pause and wait for user input when this happens. I just do not know how to determing when this occurs.
  2. jcsd
  3. Jul 19, 2012 #2


    User Avatar
    Gold Member

    Typically for something like this I'd use a browser plugin called Greasemonkey, javascript has all the browser event handlers you're looking for.
  4. Jul 19, 2012 #3
    I'd prefer to keep it within the program just for sake of ease and so that others could use it without a hassle. Do you know of a way to include the capabilities mentioned in my original post without having to use another program/plugin?
  5. Jul 19, 2012 #4


    User Avatar
    Science Advisor

    Have you taken DavidSnider's advice and looked at the event handlers available to you?
  6. Jul 20, 2012 #5
    He said that javascript had those event handlers. Is there a way to include javascript commands or classes in a java program?
  7. Jul 20, 2012 #6


    User Avatar
    Gold Member

    What libraries\frameworks are you using to populate the fields right now? How much control do you have over the website you're entering the data into?

    I don't really know the details of your program so it's kind of hard to make a suggestion.

    Using an external program to fill out form fields in a browser seems kind of kludgey to me (no offense. sometimes there is no choice, I understand).

    Another way to go is to forgo the browser bit all together and just craft your own HTTP Requests and parse the responses.
  8. Jul 22, 2012 #7
    I've actually been filling the forms using the robot class to simulate key presses, I know its not the best way but I am not familiar with scripts and I wanted it to work with all page types, the program we use now does not work with flash and I want to avoid anything like that popping up. I have it about completed and all I really need to do is put in a while loop between the simulated key presses that will only end once the browser is done loading. And an if statement that will pause the program if a popup message appears.
  9. Jul 23, 2012 #8
    No, seriously, don't re-invent the wheel. If there's well known framework or library that does it, USE IT.

    This is computer programming, an engineering discipline, not art.

    I admit it will take 1 day or so to read the API and learn how it works but you will save a whole boatload of trouble designing and testing your own libraries. Why do you use the system date function instead of computing the day of the week by yourself given the date?
  10. Jul 23, 2012 #9
    Well I'm already done with most of the code, and I was using a pause for the webpage to load before but thats not the most efficient way. Just don't want to have to start all over again. If I did make a seperate javascript program would I be able to have the two communicate or run methods from the java program in the javascript or something along those lines?
  11. Jul 23, 2012 #10
    window.onload = function () { alert("It's loaded!") }
  12. Jul 23, 2012 #11
    I don't want to alert the user, I want to alert the program, the point is for it to be completely automated without the need for user input once the automation has begun, the user just has to set it up.
  13. Jul 24, 2012 #12
    Change the body of the function to be your code, not the popup.

    BTW `window.onload` is javascript.
  14. Jul 24, 2012 #13
    My code is in java though. I already wrote the majority of the program in java. Can I call methods from the java program in the function?
  15. Jul 24, 2012 #14
    This does far more than you need, it's basically ajax for java


    edit: I am sorry, please ignore this. I'm tired and I'll edit it later. I don't think that;s what you need.

    Basically I misread the question and didnt't realise that it wasn't your *own* webpage so you don't have the ability to put javascript into the page source. I'll call a friend, he should know.
    Last edited: Jul 24, 2012
  16. Jul 24, 2012 #15
    OK friend says he doesnt know any *simple* way of doing it. With a static page you can do some dirty code to check it, but it's not reliable. He recommends you time out the download after a set interval, then parse the contents of the page to determine if you think it's complete. I am sorry I screwed up and misread the question.
  17. Jul 25, 2012 #16
    ok. I'm really not familiar with most webpage/website stuff, have not run across a need to use it before. How do I parse the contents of the page in java? What classes would I use for that?
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook