bpfsr
asked on
Parse in Visual Basic
I am trying to write a script which would parse the id from the following snippet:
<form method="post" action="/gp/checkout/addre ss/edit.ht ml/ref=ox_ shipaddres s_edit_add r_1" id="edit-joqkltnomp">
and insert it where ID is in the following snippet:
Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, ID)
FormElement.submit
the id in the first snippet is always a variable so I searched for the part of the snippet immediately before it which is a constant as follows:
(Body.innerHTML, "ox_shipaddress_edit_addr_ 1")
I am thinking if i create a string called IDString, for example, I can run the latter snippet as
Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
FormElement.submit
I am just having a hard time figuring out how to parse the id and creating the string. Help much appreciated.
<form method="post" action="/gp/checkout/addre
and insert it where ID is in the following snippet:
Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, ID)
FormElement.submit
the id in the first snippet is always a variable so I searched for the part of the snippet immediately before it which is a constant as follows:
(Body.innerHTML, "ox_shipaddress_edit_addr_
I am thinking if i create a string called IDString, for example, I can run the latter snippet as
Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
FormElement.submit
I am just having a hard time figuring out how to parse the id and creating the string. Help much appreciated.
ASKER
I think you are close Idle but there is more than one "id=" in the HTML and it is picking up one of th eother ones. that is why I wanted to find the "ox_shipaddress_edit_addr_ 1" as that is unique. If I can find that first the "id=" after that will always be the id I am looking for.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
not working either. it looks likes its not finding "id=" as
values = Split(values(1), "id=" & Chr(34))
If UBound(values) >= 1 Then
turns up ubound(values) = 0
values = Split(values(1), "id=" & Chr(34))
If UBound(values) >= 1 Then
turns up ubound(values) = 0
ASKER
From what I can tell you are trying to split the html from after the "ox_shipaddress_edit_addr_ 1"), then find the "id=" and parse the 34 characters after it; is that right? I did a
debug.print '|" & Body.innerHTML & '|"
and it looks like it is only splitting the last few paragraphs of the HTML (which is actually several pages long, with the "ox_shipaddress_edit_addr_ 1" we are looking for probably in the top quarter of the code)
there is an 'id=" in that last paragraph and it is pulling the script from after that, which in turn is not the right script. Is there a way to just parse the "id=" immediately after the "ox_shipaddress_edit_addr_ 1" without doing the split as it seems the split is where the problem is...
debug.print '|" & Body.innerHTML & '|"
and it looks like it is only splitting the last few paragraphs of the HTML (which is actually several pages long, with the "ox_shipaddress_edit_addr_
there is an 'id=" in that last paragraph and it is pulling the script from after that, which in turn is not the right script. Is there a way to just parse the "id=" immediately after the "ox_shipaddress_edit_addr_
why not use the XML DOM to get the data you want, rather than do string parsing?
ASKER
???
ASKER
Idle, it was very close but after playing with it this is what came to work:
Set Body = GWFO(iedoc, "getElementsByTagName", VbMethod, 30, "BODY")(0)
Debug.Print "|" & Body.innerHTML & "|"
If InStr(Body.innerHTML, "ox_shipaddress_edit_addr_ 1") Then
values = Split(Body.innerHTML, "ox_shipaddress_edit_addr_ 1")
Debug.Print "|" & UBound(values) & "|"
If UBound(values) >= 1 Then
values = Split(values(1), "id=" & Chr(34))
If UBound(values) < 1 Then
values = Split(values(0), Chr(34))
If UBound(values) >= 1 Then
IDString = values(0)
IDString = Mid(IDString, 15, 10)
IDString = "edit-" & IDString
' ...
Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
FormElement.submit
Else
' closing " was not found
End If
Else
' id=" was not found
End If
Else
' ox_shipaddress_edit_addr_1 was not found
End If
End If
Set Body = GWFO(iedoc, "getElementsByTagName", VbMethod, 30, "BODY")(0)
Debug.Print "|" & Body.innerHTML & "|"
If InStr(Body.innerHTML, "ox_shipaddress_edit_addr_
values = Split(Body.innerHTML, "ox_shipaddress_edit_addr_
Debug.Print "|" & UBound(values) & "|"
If UBound(values) >= 1 Then
values = Split(values(1), "id=" & Chr(34))
If UBound(values) < 1 Then
values = Split(values(0), Chr(34))
If UBound(values) >= 1 Then
IDString = values(0)
IDString = Mid(IDString, 15, 10)
IDString = "edit-" & IDString
' ...
Set FormElement = GWFO(iedoc, "getElementByid", VbMethod, 30, IDString)
FormElement.submit
Else
' closing " was not found
End If
Else
' id=" was not found
End If
Else
' ox_shipaddress_edit_addr_1
End If
End If
Open in new window