Unable to write to InputBox inside website frame

this post is the next from populating the Internet Explorer input window

We tried to isolate the problem, and it seems like I can't (maybe due to JavaScript on the page?). Please take a look at another post) to correctly refer to the specific InputBox that I want. Code I wrote:

Sub AddInfoFromIntranet() Dim Ie As SHDocVw.InternetExplorer Dim Doc As MSHTML.HTMLDocument Dim Elements As MSHTML.IHTMLElementCollection Set Ie = New SHDocVw.InternetExplorer With Ie .navigate "[HERE GOES MY WEBSITE]" .Visible = True Do Until Not .Busy And .readyState = 4 DoEvents Loop Set Doc = .document Set Elements = Doc.getElementsByName("Nachnamevalue") .Quit End With Set Ie = Nothing End Sub 

"Nachnamevalue" is the name of the element contained in the "top_window" frame of the web page:

HTML of the Frame

The figure above is what I get by opening my desired address, pressing F12 and pressing the "select item" element on the desired input field. At the very beginning, instead, the page is just a bunch of javascripts (the start page is F12 and copying the contents of the DOM explorer)

Now, if I try to see that my variable is "Elements", I get the object basically empty.

Empty object

If instead I write:

 Set Elements = Doc.getElementsByName("top_window") 

something needs to be found. Unfortunately, I work on the INTRANET page, so I cannot provide you with an address.

EDIT: FULL javascript

 <html><head><script language="JavaScript"> function NewWindow(window_name){ var detail; detail = open(window_name,"detail","dependent,resizable,screenX=50,screenY=50,width=400,height=400"); detail.focus(); } function NewWindowScroll(window_name){ var detail; detail = open(window_name,"detail","dependent,scrollbars,resizable,screenX=50,screenY=50,width=600,height=500"); detail.focus(); } function NewWindowSize(window_name,w,h){ var detail, windata; detail = open(window_name,"detail","dependent,scrollbars,resizable,screenX=250,screenY=250,width=" + w + ",height=" + h); detail.focus(); } function MiniWindow(window_name){ var detail; detail = open(window_name,"miniwindow","dependent=no,resizable=yes,screenX=0,screenY=0,width=800,height=20"); detail.focus(); } last_timer="new" function DoSearch(){ document.Suchform.submit() } function wait_and_search(){ clearTimeout(last_timer) last_timer = window.setTimeout("DoSearch()", 400); } function check_kpeq(this_handle){ equ_string = this_handle.value; text = equ_string.replace(/[^0-9A-Za-z\-]/g,""); zahlen = text.split(/[\-\/]/); if (zahlen.length != 4) {falsches_equ_format(this_handle); return false;} fill="000"; Zahl_1 = fill + zahlen[0]; Zahl_1 = Zahl_1.slice(Zahl_1.length-3) Zahl_2 = fill + zahlen[1]; Zahl_2 = Zahl_2.slice(Zahl_2.length-1) Zahl_3 = fill + zahlen[2]; Zahl_3 = Zahl_3.slice(Zahl_3.length-2) Zahl_4 = zahlen[3]; this_handle.value = (Zahl_1 + "-" + Zahl_2 + "-" + Zahl_3 + "-" + Zahl_4); return true; } function check_anab(this_handle){ anab_string = this_handle.value; if (anab_string == "") {return true;} text = anab_string.replace(/[^0-9\-]/g,""); zahlen = text.split(/[\-\/]/); if (zahlen.length != 3) {falsches_anab_format(this_handle); return false;} fill="000"; Zahl_1 = fill + zahlen[0]; Zahl_1 = Zahl_1.slice(Zahl_1.length-2) Zahl_2 = fill + zahlen[1]; Zahl_2 = Zahl_2.slice(Zahl_2.length-2) Zahl_3 = fill + zahlen[2]; Zahl_3 = Zahl_3.slice(Zahl_3.length-3) this_handle.value = (Zahl_1 + "-" + Zahl_2 + "-" + Zahl_3 ); return true; } function falsches_anab_format(this_handle) { t1 = "Ung?ltiges Format f?r HVT AN/AB: >> " + this_handle.value + " <<\n\n"; t2 = "Nur 3 Zahlen mit '-' als Trennzeichen erlaubt\n\n"; t3 = "ZB: '01-08-001'" alert(t1 + t2 + t3); this_handle.focus(); } function falsches_equ_format(this_handle) { t1 = "Ung?ltiges Format f?r EQU: >> " + this_handle.value + " <<\n\n"; t2 = "Nur 4 Zahlen mit '-' als Trennzeichen erlaubt\n\n"; t3 = "ZB: '003-2-60-7'" alert(t1 + t2 + t3); this_handle.focus(); } function check_form(){ if (check_kpeq(document.editanlagedata.KPEQ) == false){return false}; if (check_anab(document.editanlagedata.HVAN) == false){return false}; if (check_anab(document.editanlagedata.HVAB) == false){return false}; return true; } </script> <title>Telefon-Suche</title> <link title="Telefonsuche - Abteilung" href="[XML FILE REGARDING WEBPAGE].xml" rel="search" type="application/opensearchdescription+xml"> <link title="Telefonsuche - Name" href="[XML FILE REGARDING WEBPAGE].xml" rel="search" type="application/opensearchdescription+xml"> </head> <!-- frames --> <frameset rows="90,*" bordercolor="#ffffcc" frameborder="0"> <frame name="top_window" src="index.cfm?fuseaction=StdSearchForm" scrolling="No"> <frame name="bottom_window" src="index.cfm?fuseaction=ShowStartpage" scrolling="Auto"> </frameset><noframes></noframes> 

+3
source share
1 answer

The problem is that when your target input field "Nachnamevalue" is inside the IFrame , then IE should go to the destination page and then to the IFrame as well .

If no IFrame navigation occurs, the DOM does not contain elements inside the IFrame , and therefore it does not work. NTN

(The sample code uses the files that are on my PC, so replace the URL with your actual intranet URL and with the name "main.html" with the name of the actual page.)

 Option Explicit ' Add reference to Microsoft Internet Controls (SHDocVw) ' Add reference to Microsoft HTML Object Library Sub AddInfoFromIntranet() Dim ie As SHDocVw.InternetExplorer Dim doc As MSHTML.HTMLDocument Dim url As String ' Navigate to main page first url = "file:///c:/temp/Noldor/" Set ie = New SHDocVw.InternetExplorer ie.Visible = True ie.navigate url & "main.html" While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE: DoEvents: Wend Dim inputs As MSHTML.IHTMLElementCollection Dim iFrames As MSHTML.IHTMLElementCollection Dim iFrame As MSHTML.HTMLFrameElement ' Get top_window frame and navigate to it then Set doc = ie.document Set iFrames = doc.getElementsByName("top_window") If Not iFrames Is Nothing Then Set iFrame = iFrames(0) ie.navigate url & iFrame.src While ie.Busy Or ie.readyState <> READYSTATE_COMPLETE: DoEvents: Wend Set inputs = doc.getElementsByName("Nachnamevalue") If Not inputs Is Nothing Then inputs(0).Value = "Test123" End If End If ie.Quit Set ie = Nothing End Sub 

HTML example main.html :

 <html> <head> <title></title> </head> <frameset cols="" rows=""> <frame name="top_window" src="top_window.html" /> </frameset> <noframes> <!-- no frames content here --> </noframes> </html> 

HTML example top_window.html :

 <html> <head> <title></title> </head> <body bgcolor="#ffffcc"> <form name="Suchform" action="index.cfm"> Nachname: <input name="Nachnamevalue" type="text" size="8"> </form> </body> </html> 
+2
source

Source: https://habr.com/ru/post/1209096/


All Articles