Page 1 of 1

[SOLVED] How to tell if a DOM object exists on a webpage

Posted: 15 Aug 2015, 09:17
by momo2000
I’ve been working with DOM to be able to automatically populate the fields on a web page. I used iWB2 Learner to get the names of the fields and it is going well, and I have been able to access and populate/write all the input fields, such as: (using wb := IEGet("Calendar - Bookeo") from Jethreow)

Code: Select all

wb.Document.All.cardType.Value := "VISADEBIT"   
wb.Document.All.cardNumber.Value := "1234123412341234"
wb.Document.All.cardHolderName.Value := "John Smith"
wb.Document.All.expiryMonth.Value := "12"
wb.Document.All.expiryYear.Value := "2021"
wb.Document.All.cvv.Value := "999"
However, I am trying to add a bit of error checking into the code and “check” and see if the user is on the correct page, before allowing the script to proceed further. Using the “handle” wb := IEGet("Calendar - Bookeo") and checking to see if it is valid won’t work because there are several screens/modes on the webpage that still have that as a title, so I really need to check and see if the input box exists.

However, I can’t seem to get the syntax correct. I’ve tried using the index number (although I’d rather check the actual “name” since I’m worried that the index number might change).

Code: Select all

if wb.Document.All.cardNumber.index = 120
{
msgbox, found object	
}
How could I check the existence of an input box on a page (hopefully using the input box name)?

Re: How to tell if a DOM object exists on a webpage

Posted: 15 Aug 2015, 11:33
by Blackholyman
If your using IE9+ one way you can use is getElementsByName()

Like this

Code: Select all

if (wb.Document.getElementsByName("cardType").length > 0)
{
msgbox, found object	
}
This topic has more ways http://stackoverflow.com/questions/5629 ... isible-dom

Re: How to tell if a DOM object exists on a webpage

Posted: 16 Aug 2015, 14:01
by momo2000
paymentscreen.png
Thanks, Blackholyman: I was out yesterday, but am back on this today.

I understand what you are saying in your example and that should work perfectly, because the “cardtype” always has a value (can’t be blank), so that would be a good thing to check the existence of. So if that object exists, then the code can assume that the user is on the correct page/form.

However, I can’t seem to make that syntax work. The msgbox message never appears, so I assume the syntax isn’t correct, or I’m missing something. I have attached a screen shot of the webpage, and also the iWB2 Learner as well.

I tried both:

Code: Select all

if (wb.Document.getElementsByName("cardType").length > 0)
and

Code: Select all

if (wb.Document.getElementsByName("customerCreditCardInput.cardType ").length > 0)
Any thoughts?

Re: How to tell if a DOM object exists on a webpage

Posted: 16 Aug 2015, 23:09
by momo2000
Been working with this more today.
If I am on the correct web page, and run this code it changes the value of the "cardtype" control:

Code: Select all

wb.Document.All.cardType.Value := "VISADEBIT"
If I am NOT on the correct page and run that code, I get an error (that stops AHK): "Error 0x80020006 - Unknown name." SO, how can I check for the EXISTANCE of the object BEFORE I change its value. That way if it doesn't exist, I can throw a nice error (MsgBox) to the user, instead of running code that will crash AHK?

Re: How to tell if a DOM object exists on a webpage

Posted: 17 Aug 2015, 08:05
by evilC
use try?

Re: How to tell if a DOM object exists on a webpage

Posted: 17 Aug 2015, 13:33
by momo2000
Thanks evilC: Never used TRY before. But I am "trying" :) I used this code:

Code: Select all

wb := IEGet("Calendar - Bookeo") 
try
{
    wb.Document.All.cardType.Value := "VISADEBIT"
}
catch
{
    MsgBox, You are not on the correct page
}
But it doesn't "catch" and show the msg box . . . even with my web browser completely closed . . . strange. I must be doing something wrong.

Re: How to tell if a DOM object exists on a webpage

Posted: 22 Aug 2015, 13:06
by momo2000
I did get this working using TRY. Good idea. So now I just "try" to interact with the object, and if I get an error, then I assume they are on the wrong page. Took me a bit to figure it out, but this method works just fine for my purposes. Thanks for the suggestion, wouldn't have figured it out on my own