tag:forum.selfhtml.org,2005:/self jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht – SELFHTML-Forum 2021-07-16T23:41:21Z https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789563#m1789563 Oe 2021-06-23T17:03:00Z 2021-06-23T17:03:00Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Guten Abend,</p> <p>Ich versuche ein Drop Down Menü einer Webseite automatisch zu bestücken.</p> <p>Ich war bereits in einen anderen Forum unterwegs, jedoch konnte dort keiner helfen. <a href="https://www.vb-paradise.de/index.php/Thread/133562-jQuery-change-Method-automatisches-Nachladen-funktionert-nicht/?s=e22e915ff8d47761a79f0a17c1c12f237aaf3182" rel="nofollow noopener noreferrer">https://www.vb-paradise.de/index.php/Thread/133562-jQuery-change-Method-automatisches-Nachladen-funktionert-nicht/?s=e22e915ff8d47761a79f0a17c1c12f237aaf3182</a></p> <p>Mein Problem: Durch Auswahl eines Eintrags des Drop Down Menüs werden Inhalte weiterer Drop Drop Down Menüs nachgeladen mit der jQuery .change() Methode. Dies funktioniert auch prima auf der original Webseite, solange ich die Auswahl per „Hand“ mache. Aber sobald ich dies automatisiert mache, wird zwar meine Auswahl zwar angezeigt, aber das Event, welche die weiteren Drop down nachlädt, startet nicht.</p> <p>Mein Code, der das Drop Down auswählt sieht so aus:</p> <pre><code class="block">Option Explicit On Imports SHDocVw Public Module Main Dim IEApp As SHDocVw.InternetExplorer Public Sub Main() Call initialzation() Call Drop_Down("RSS252", "standardCode") MsgBox("Program finished") End Sub Sub initialzation() IEApp = CreateObject("InternetExplorer.Application") IEApp.Visible = True IEApp.Navigate("C:\ISED\trial.html") Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop End Sub Sub Drop_Down(Auswahl, ElementName) For Each htmloption As Object In IEApp.Document.GetElementsByName(ElementName) For Each element In htmloption.Options If element.Text = Auswahl Then element.Selected = True Exit Sub End If Next Next End Sub End Module </code></pre> <p>Jedoch wird das event</p> <pre><code class="block">$("#standardCode").on("change", function (event){..... </code></pre> <p>nicht ausgelöst.</p> <p>Leider habe keine Ideen mehr, woran es liegen könnte. Weiß jemand, wie man das „Nachladeevent“ durch Auswahl eines Feldes des Drop Downs automatisiert starten kann?</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789565#m1789565 Rolf B 2021-06-23T17:21:27Z 2021-06-23T17:21:27Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <p>wie sieht das Stück HTML aus, wo das standardCode-Element steht? Möglicherweise ist dort ein Teil der Ursache zu finden.</p> <p>Denn <code>$("#standardCode")</code> sucht ein Element mit <code>id='standardCode'</code>. Aber deine Drop_Down Methode verwendet GetElementsByName, sucht also nach Elementen mit <code>name='standardCode'</code>.</p> <p>Letzteres wäre besser, denn wenn Du mehrere Elemente mit der gleichen ID hast wäre das ein Verstoß gegen die Regeln von HTML.</p> <p>Das zweite Problem ist, dass Du die selected-Eigenschaft programmatisch setzt (ich nehme mal an, dass das <option> Elemente eines <select> sind). Programmatische Veränderungen dieser Art triggern aber keine Events; das ist Absicht. Das Event musst Du selbst auslösen.</p> <p>Wie das bei einem als Webbrowser-Control in VB funktioniert - tjaaaaa. Ist das überhaupt VB oder VB.NET? Oder ist das VBA? Oder VBScript? Ich habe vor 20 Jahren mal das Webbrowser-Control mit C# eingebunden, das ist verdammt lang her. Ich meine auch, dass es da Events gibt, auf die Du lauschen kannst, d.h. Du musst keine Warteschleife machen um das Fertigstellen des Navigate abzuwarten. Es müsste ein Event geben, das nach erfolgreichem Navigate feuert. Aber das mag je nach der verwendeten VB-Geschmacksrichtung nicht möglich sein.</p> <p>Für das Triggern von Change musst Du grundsätzlich die DispatchEvent-Methode des Select-Elements aufrufen und ein Change-Event mitgeben. Aber wie das in VB gemacht wird? Keine Ahnung.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789568#m1789568 Oe 2021-06-23T17:34:25Z 2021-06-23T17:34:25Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>Sorry, hatte den link zum HTML Seite vergessen. Es handelt sich um die Passage "Radio Standard Specification (RSS)" der Webseite.</p> <p><a href="https://www.vb-paradise.de/index.php/Attachment/50389-trial-html" rel="nofollow noopener noreferrer">https://www.vb-paradise.de/index.php/Attachment/50389-trial-html</a></p> <p>Gruß Oelkanne</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789594#m1789594 Oe 2021-06-24T12:08:52Z 2021-06-24T12:08:52Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>Habe versucht, mich entsprechend deinen Hinweis mit dem dispatchEvent auseinanderzusetzten. (... noch nicht so richtig verstanden..) Ein</p> <pre><code class="block">IEApp.Document.dispatchEvent("standardCode") </code></pre> <p>funktionert jedoch nicht. (passiert nichts)</p> <p>An einer anderen Stelle der Seite, kann ich jedoch die Javafunktion</p> <pre><code class="block">$("#editEmission").on("click", function (){... </code></pre> <p>html:</p> <pre><code class="block"><div class="form-group"> <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xs-offset-6 col-sm-offset-6 col-md-offset-6 col-lg-offset-6"> <button id="editEmission" type="button" name="editEmission" class="btn btn-success btn-xs">Lookup</button> </div> </div> </code></pre> <p>mit</p> <pre><code class="block">.getelementbyid("editEmission").Click </code></pre> <p>starten, ohne die Javafunktionen seperat zu befeuern.</p> <p>Was ist der Unterschied hinsichtlich des Befeuerens eines Buttons und DropDowns?</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789596#m1789596 Rolf B 2021-06-24T12:54:22Z 2021-06-24T12:54:22Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oelkanne,</p> <p>der Unterschied ist, dass es zum Triggern eines Klicks eine explizte Methode im DOM gibt: Click.</p> <blockquote> <p>IEApp.Document.dispatchEvent("standardCode")</p> </blockquote> <p>Das kann nicht funktionieren. DispatchEvent braucht ein Event-Objekt. Ich habe nochmal geforscht. Das change-Event wirft ein generisches Event-Objekt, kein spezielles wie MouseEvent oder KeyboardEvent.</p> <p>Die Dokumentation bei MS ist - wie üblich - write-only. Wer weiß, wie es geht, kann sie schreiben. Aber wer nicht weiß, wie es geht, kann sie nicht lesen. Immerhin gibt's zwischendurch mal Beispiele.</p> <p><a href="https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ff975826(v=vs.85)" rel="nofollow noopener noreferrer">Guckst Du hier</a></p> <p>Und ich habe <a href="https://stackoverflow.com/questions/31955265/events-ie11-on-change" rel="noopener noreferrer">diesen</a> Thread bei Stackoverflow gefunden.</p> <p>Ich würde also annehmen, dass Du so vorgehen musst:</p> <pre><code class="block language-vb"><span class="token keyword">Dim</span> changeEvent changeEvent <span class="token operator">=</span> IEApp<span class="token punctuation">.</span>Document<span class="token punctuation">.</span>createEvent<span class="token punctuation">(</span><span class="token string">"HTMLEvents"</span><span class="token punctuation">)</span> changeEvent<span class="token punctuation">.</span>initEvent <span class="token string">"change"</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">,</span> <span class="token boolean">true</span> <span class="token punctuation">?</span><span class="token punctuation">?</span><span class="token punctuation">?</span><span class="token punctuation">.</span>dispatchEvent changeEvent </code></pre> <p>Für ??? brauchst Du das Select-Element, das den Change melden soll. Also vermutlich das, was Du mit GetElementsByName(ElementName) ermittelt hast. Wobei GetElementsByName - wie der Name sagt - eine Collection liefert und kein einzelnes Element, Du müsstest den Trigger-Mechanismus also in die vorhandene Schleife <code>For Each htmloption As Object ...</code> einbauen. Zuerst die Option setzen, dann das Event-Objekt erzeugen und mit <code>htmloption.dispatchEvent</code> abfeuern.</p> <p>Keine Garantie für irgendwas - ich habe keine Ahnung in welchem Umfeld du agierst und meine Rückfrage hast Du ignoriert. "VB" ist keine hinreichende Aussage.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789599#m1789599 Oe 2021-06-24T13:46:47Z 2021-06-24T13:46:47Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p> Ahh, jetzt hab` ich's verstanden! ..... es funktioniert!</p> <p> Besten Dank für dein Hilfe! </p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789600#m1789600 Oe 2021-06-24T13:50:18Z 2021-06-24T13:50:18Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Mache das VB.Net </p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789604#m1789604 Rolf B 2021-06-24T15:13:33Z 2021-06-24T15:13:33Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <p>dann kümmere dich um eine Ablösung. Der Internet Explorer ist mausetot und wird von MS nicht mehr wirklich supported. Die Funktionalität des IE ist im Vergleich zu Chromia (also Chrome, Edge, Opera) oder Füchsen deutlich reduziert. Du wirst den IE zwar noch ein paar Jahre auf Windows Geräten vorfinden, aber definitiv nicht über das Ende dieses Jahrzehnts hinaus.</p> <p>Leider gibt es - wie mir scheint - nichts, was der Integration von ShDocVw wirklich nahe kommt. Es gibt das Chromium Embedded Framework (Cef) und eine .net Hülle darum: CefSharp (die auch für VB funktioniert), aber Cef hat keinen direkten Zugang zum DOM. D.h. du hast kein Objekt in VB, mit dem Du direkt dein Select-Element heraussuchen kannst. Statt dessen musst Du JavaScript auf die Seite bringen, das die Arbeit macht, und es gibt Interfaces zwischen der .net und V8 Seite (V8 ist die JavaScript Runtime von Chrome). Das Ganze ist auch ziemlich ressourcenhungrig.</p> <p>Schau Dir trotzdem mal CefSharp an. Es ist für open-source Projekte typisch schlecht dokumentiert und sie verweisen auch gern auf Cef, wenn eine Frage über die reine Brückenfunktion hinausgeht. D.h. es ist ziemlich zäh, sich dort hineinzufuchsen.</p> <p>Alternativ habe ich noch EO.WebBrowser und Dotnetbrowser - aber die kosten richtig Geld und ich VERMUTE, dass die unter der Haube auch Cef verwenden. EO bringt immerhin .net Wrapperklassen für das DOM mit. Eine Mozilla-basierende Lösung kenne ich nicht, und außer Mozilla und Chromium gibt's ja eigentlich nichts mehr.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789625#m1789625 Oelkanne 2021-06-25T09:43:35Z 2021-06-25T09:43:35Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>Ja, das mit dem Auslaufen des IExplorers ist für mich als Hobbybastler problematisch. Ich hoffe noch, dass bis zum endgültigen Ende andere Möglichkeiten gibt.</p> <p>Mit der aktuellen Seite ist jedoch noch ein Problem aufgetaucht. Ich kann alle Drop down‘s genau dieser Seite damit bestücken bzw. die Events auslösen.</p> <pre><code class="block">objEvent = IEApp.Document.createEvent("HTMLEvents") objEvent.initEvent("change", True, False) IEApp.Document.getElementById(ElementName).dispatchEvent(objEvent) </code></pre> <p>Jedoch muss ich Seite zig-fach ausfüllen. Sobald die Seite verlassen wird, und die neue leere Seite aufgebaut ist (Seite ist identisch), läuft das .createEvent("..“) in einen Fehler.</p> <pre><code class="block">System.NotSupportedException HResult=0x800A01B6 Nachricht = Ausnahme von HRESULT: 0x800A01B6 Quelle = Microsoft.VisualBasic Stapelüberwachung: bei Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack) bei Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack) </code></pre> <p>Scheint so, da das Event an die „alte“ Seite gebunden ist.</p> <p>Hast du eine Idee wie man hier vorgehen kann?</p> <p>Gruß Oelkanne</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789628#m1789628 Rolf B 2021-06-25T10:27:37Z 2021-06-25T10:27:37Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oelkanne,</p> <blockquote> <p>Ich hoffe noch, dass bis zum endgültigen Ende andere Möglichkeiten gibt.</p> </blockquote> <p>Gibt's jetzt schon, aber - beispielsweise - Cef ist deutlich schwieriger zu benutzen.</p> <p>0x800A01B6 bedeutet, dass ein Objekt eine Methode oder eine Eigenschaft nicht kennt. Die Frage ist, was genau er da nicht kennt, das sieht man dem Stack nicht an.</p> <p>Versuch mal, mit dem Debugger einzelschrittweise durchzugehen. Wenn in der Zeile, wo es schiefgeht, mehrere Interaktionen mit MSHTML durchgeführt werden, wie z.B. hier:</p> <pre><code class="block language-vb">IEApp<span class="token punctuation">.</span>Document<span class="token punctuation">.</span>createEvent<span class="token punctuation">(</span><span class="token string">"HTMLEvents"</span><span class="token punctuation">)</span> </code></pre> <p>dann guck ob Du über Inspektor rauskriegen kannst, welcher der Teile schiefgeht. Im Zweifelsfall nimm die Zeile auseinander und speichere die Teilergebnisse in Variablen.</p> <p>Eins ist auf jeden Fall klar: Wenn die Seite neu geladen wurde, ist das bisherige Dokument ungültig. Ein zwischengespeicherter Wert von IEApp.Document darf nicht mehr verwendet werden.</p> <p>Und wie bei der Initialisierung musst Du nach einem Reload der Seite darauf achten, dass die Navigate-Operation abgeschlossen ist. Navigate startet eine asynchrone Operation. Sleep(1000) ist aber schon ziemlich lang. 100ms pro Wartezyklus reicht und erhöht die Schwuppdizität der Anwendung deutlich.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789630#m1789630 Oelkanne 2021-06-25T11:34:30Z 2021-06-25T11:34:30Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>IEApp.Document.getelementbyid(...) bei den Feldern auf der neuen Seite werden ausgefüllt (bei deaktivierter eventfunktion).</p> <p>Zeitproblem kann auch ausgeschlossen werden, da Fehler auch im Einzelschritt.</p> <blockquote> <p>dann guck ob Du über Inspektor rauskriegen kannst, welcher der Teile schiefgeht. Im Zweifelsfall nimm die Zeile auseinander und speichere die Teilergebnisse in Variablen <</p> </blockquote> <p>Mit dem Mouseover im Einzelschritt:</p> <p>objEvent: Nothing IEApp.Document: DirectCast(IEApp.Document, mshtml.HTMLDocumentClass) = 'DirectCast(IEApp.Document, mshtml.HTMLDocumentClass)' löste eine Ausnahme des Typs 'System.InvalidCastException' aus</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789634#m1789634 Rolf B 2021-06-25T12:21:02Z 2021-06-25T12:21:02Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oelkanne,</p> <p>das ist mir zu verwuselt. Beim Anzeigen des Document kam die InvalidCastException?</p> <p>Aber ich bin an der Stelle wohl auch ausgezählt. Eine VB.NET Anwendung um das selbst zu probieren schreibe ich jetzt nicht.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789638#m1789638 Oelkanne 2021-06-25T13:17:18Z 2021-06-25T13:17:18Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>Hier der VB.NET Code, falls du bereit wärst, den Fehler nachzustellen.</p> <p>Dieser trägt in das drop down erst "RSS252" ein. Dann wird die Routine nochmal aufgerufen und es wird "RSS210" eingetragen.</p> <p>soweit funktiniert es.</p> <p>Wenn ich jedoch die Seite nach dem ersten Aufruf ändere (zb. Home und wieder zurück) läuft es in den Fehler.</p> <pre><code class="block">Option Explicit On Imports SHDocVw 'aus Microsoft Internet Controls Public Module Main Dim IEApp As SHDocVw.InternetExplorer Public Sub Main() Call initialization() Call Drop_Down("RSS252", "standardCode") MsgBox("Bitte einmal im Browser die Seite ändern und wieder zurückgehen") Call Drop_Down("RSS210", "standardCode") MsgBox("Program finished") End Sub Sub initialization() IEApp = CreateObject("InternetExplorer.Application") IEApp.Visible = True IEApp.Navigate("C:\ISED\trial.html") System.Threading.Thread.Sleep(2000) : Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop '-- Warten End Sub Sub Drop_Down(Auswahl, ElementName) Dim objEvent For Each htmloption As Object In IEApp.Document.GetElementsByName(ElementName) For Each element In htmloption.Options If element.Text = Auswahl Then element.Selected = True objEvent = IEApp.Document.createEvent("HTMLEvents") objEvent.initEvent("change", True, False) IEApp.Document.getElementById(ElementName).dispatchEvent(objEvent) Exit Sub End If Next Next End Sub End Module </code></pre> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789643#m1789643 Oe 2021-06-25T18:22:01Z 2021-06-25T18:22:01Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>Bitte nimm diesen Code. Damit kannst du direkt gegen eine Live Site testen.</p> <pre><code class="block">Option Explicit On Imports SHDocVw 'aus Microsoft Internet Controls Public Module Main Dim IEApp As SHDocVw.InternetExplorer Public Sub Main() Call initialization() IEApp.Document.getElementById("wb-auto-1").Click Call Drop_Down("RSS252", "radioSpecification") MsgBox("Einmal im Browser den "search" butoon drücken, dann wieder zurückgehen") Call Drop_Down("RSS210", "radioSpecification") MsgBox("Program finished") End Sub Sub initialization() IEApp = CreateObject("InternetExplorer.Application") IEApp.Visible = True IEApp.Navigate("https://sms-sgs.ic.gc.ca/equipmentSearch/searchRadioEquipments?execution=e1s1&lang=en") System.Threading.Thread.Sleep(2000) : Do While IEApp.Busy Or IEApp.Document.ReadyState <> "complete" : System.Threading.Thread.Sleep(1000) : Loop '-- Warten End Sub Sub Drop_Down(Auswahl, ElementName) Dim objEvent For Each htmloption As Object In IEApp.Document.GetElementsByName(ElementName) For Each element In htmloption.Options If element.Text = Auswahl Then element.Selected = True objEvent = IEApp.Document.createEvent("HTMLEvents") objEvent.initEvent("change", True, False) ' keine Fnktion auf dieser Seite - nur zum Testen IEApp.Document.getElementById(ElementName).dispatchEvent(objEvent) ' keine Funktion auf dieser Seite - nur zum Testen Exit Sub End If Next Next End Sub End Module </code></pre> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789645#m1789645 Rolf B 2021-06-25T18:59:59Z 2021-06-25T19:03:38Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <p>ich wüsste nicht einmal, wie ich diesen Code in ein VB.Net Projekt integrieren kann. Ich kenne nur C#.</p> <p>Die Sub Main kann doch auch nicht alles sein. Braucht es nicht ein Form, auf dem das WebControl sitzt? Was für ein Projekttyp ist das?</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789646#m1789646 Oe 2021-06-25T19:12:18Z 2021-06-25T19:12:18Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>Macht nichts. Habe einiges gelernt bei Dir! Vielen Dank nochmal.</p> <p>Gruß Oelkanne</p> <p>Nur zur Info: Visual Studio 2019 öffnen - neues Projekt - Konsolenanwednung - und dann Code reinkopieren.</p> <p>Damit "SHDocVw" funktioniert muss man noch: Project - Verweis hinzufügen - COM - Microsoft Internet Controls - OK</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789647#m1789647 Rolf B 2021-06-25T20:19:07Z 2021-06-25T20:19:07Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <p>jo, ich hatte eine WinForms Anwendung gemacht.</p> <p>Und ich kriege den gleichen Fehler. Das scheint - wenn man etwas im Netz rumsucht, ein generelles Problem des InternetExplorer-COM-Objekts zu sein.</p> <p>Du verwendest hier auch die Scripting-Schnittstelle für einen autarken Browser, die mit der SHDocVw-Komponente überhaupt nichts am Bein hat. Nimm die Referenz wieder aus, dimensioniere IEApp ohne Typ, nimm den Imports weg - und alles funktioniert wie vorher.</p> <p>Ein Powershell-User hatte als Workaround genannt, dass man nicht die nativen Methoden nehmen solle, sondern die von den IHTMLDocumentN Interfaces. Nur - da gibt's createEvent nicht. Nur ein createEventObject, und ich weiß nicht, wie man die verwenden soll.</p> <p>Viel Glück - ich bin jetzt wirklich raus.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789777#m1789777 Oe 2021-06-30T16:53:36Z 2021-06-30T16:53:36Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Das befeuern sollte etwa so gehen</p> <pre><code class="block">Dim doc4 As IHTMLDocument4 = DirectCast(IEApp.Document, IHTMLDocument4) Dim doc4el As IHTMLElement4 = DirectCast(doc4.getElementById(ElementName), IHTMLElement4) Dim dummy As Object = Nothing Dim eventObj As IHTMLEventObj = doc4.CreateEventObject(dummy) doc4el.FireEvent("onchange", eventObj) </code></pre> <p>...aber Event wird nicht ausgelöst </p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789779#m1789779 Rolf B 2021-06-30T17:15:25Z 2021-06-30T17:15:25Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <p>ohne irgendwas recherchiert zu haben - bist Du sicher, dass der Eventname für FireEvent "onchange" heißt? onchange ist eigentlich der Name des HTML Attributs, mit dem man einen Change-Handler registrieren kann.</p> <p>Das Event im DOM heißt "change".</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790273#m1790273 Oelkanne 2021-07-16T10:09:28Z 2021-07-16T10:09:28Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Ich beschäftige mich zurzeit mit alternativen Lösungen. Es läuft wohl auf CefSharp oder Webview2 hinaus. Erste Eindrücke: Die ersten Gehversuche mit CefSharp sind schon schwierig. Auch scheint man kein „exe“ kompilieren zu können, um das Programm stand Alone zu betreiben. Für Webview2 gibt es wenig Dokumentation für VB.NET.</p> <p>Da ich dringend die bestehende Lösung weiter betreiben möchte, bis ich CefSharp oder Webview2 ausreichend beherrsche, hier ein neuer Ansatz:</p> <p>Wie führe ich das Javascript einer bestehenden Webseite aus?</p> <p>HTML code der Webseite wie gehabt:</p> <pre><code class="block"><script> $("#standardCode").on("change", function (event){ let standardCode = this.value; cleanSelect($("#version")); }); </script> </code></pre> <p>Die Idee: Das Ereignis mit Javascript auszuösen: VB.NET code</p> <pre><code class="block">Dim doc3 = DirectCast(IEApp.Document, IHTMLDocument3) Dim doc2 = DirectCast(IEApp.Document, IHTMLDocument2) Dim target = doc3.getElementById("standardCode") Call doc2.parentWindow.execScript("target.focus();change()", "JavaScript") </code></pre> <p>Jedoch läuft der call … in den Fehler 0x80020101. Es hängt wohl an dem Syntax „("target.focus();change()", "JavaScript")“</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789782#m1789782 Oe 2021-06-30T17:59:26Z 2021-06-30T17:59:26Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Scheinbar muss 'on'+event genommen werden (onchange, onmouseover,..) "change" läuft in den Fehler "Ungültiges Argument"</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789783#m1789783 Rolf B 2021-06-30T18:37:36Z 2021-06-30T18:37:36Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <p>okay. Warum sollte man das auch dokumentieren, liebe Freunde bei Microsoft. Dieser Haufen Interfaces ist einfach nur ein abscheulicher Misthaufen, und die Doku ist eine unbrauchbare, stumpfe Auflistung von Methoden und Parametern, ohne Erklärung von Sinn oder Zweck dessen, was da angeboten wird. Drölf verschiedene Interfaces für HTMLElement - klar, es sind COM Interfaces und wenn erstmal eins definiert ist, darf man es nicht mehr ändern, aber es ist trotzdem GRUSELIG.</p> <p>fireEvent ist offiziell auf IHTMLElement3 deklariert, nicht IHTMLElement4. Und IHTMLElement4 erbt lauft Doku von IDispatch und nicht von IHTMLElement3, so dass auf dem 4er Interface die Methoden des 3er Interface nicht sichtbar sein dürften. Interessant, dass er die Methode trotzdem findet. Es mag daran liegen, dass das Script-Interface namensgesteuert bindet und ihm das Interface wurscht ist.</p> <p>Laut Doku hat fireEvent jedenfalls 3 Parameter, und der 3. soll ein ref-Parameter mit einem VARIANT_BOOL sein. Keine Ahnung, wie man das in VB formuliert. Er müsste auch abbrechen, wenn Du die falsche Methodensignatur benutzt, und nicht einfach nichts tun. Seltsam. Und weil es das Scripting Interface ist, gibt's auch keine Interop-Assemblies und kein Intellisense.</p> <p>Das ist alles alter, IE-basierender Kram, MS depubliziert die Dokumentation dafür, und das, was man noch findet, ist kaum verständlich. Wobei - die meiste MSDN-Doku seit 2005 ist unverständlich. Scheinbar will Microsoft nicht, dass man das benutzt. Du verwendet da eine COM Schnittstelle zum IE, und nicht den IE als Webbrowser-Control. Das macht es nochmal komplizierter.</p> <p> </p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789787#m1789787 Tabellenkalk 2021-06-30T20:32:12Z 2021-06-30T20:32:12Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo,</p> <blockquote> <p>Scheinbar muss 'on'+event genommen werden (onchange, onmouseover,..) "change" läuft in den Fehler "Ungültiges Argument"</p> </blockquote> <p>"onchange" oder "onChange"?</p> <p>Gruß<br> Kalk</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789786#m1789786 Der Martin 2021-06-30T19:16:29Z 2021-06-30T19:16:29Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <blockquote> <p>Wobei - die meiste MSDN-Doku seit 2005 ist unverständlich.</p> </blockquote> <p>och, nun sei nicht unfair! Zumindest die deutschen Übersetzungen sind um Größenordnungen besser geworden.</p> <p>Ich kann mich noch erinnern, dass ich in den frühen 2000er Jahren öfter mal in der MS-Doku geschmökert habe. Meistens habe ich bestimmte Artikel über Google gesucht, und Google hat damals (vermutlich anhand der IP-Adresse) vermutet, dass ich am liebsten die deutsche Fassung hätte.</p> <p>Oft war es aber so, dass ich dann den deutschen Text gelesen und mich gefragt habe: Was wollen die von mir?? Wenn ich gar nichts mehr verstanden habe, hab ich stattdessen die englische Originalfassung aufgerufen ... und mir dann an die Stirn geklatscht: Ach <strong>das</strong> meinen die!<br> Die maschinelle Übersetzung ins Deutsche war damals wirklich noch unter aller Sau. Das hat sich seither deutlich verbessert.</p> <p>Live long and <s>pros</s> healthy,<br>  Martin</p> <div class="signature">-- <br> Fische, die bellen, beißen nicht. </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1789790#m1789790 Rolf B 2021-07-01T07:06:04Z 2021-07-01T07:06:04Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Tabellenkalk,</p> <p>nee, die Beispiele die man im Netz findet sagen "onchange". Was man aber <strong>nicht</strong> findet, ist eine sinnvolle Dokumentation der Parameter, die dieser MSHTML Krampf erwartet.</p> <p>Oder ich suche an der falschen Stelle. Oder MS hat mal wieder alles Wichtige depubliziert.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790274#m1790274 Rolf B 2021-07-16T10:15:02Z 2021-07-16T10:15:12Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oelkanne,</p> <p>gibt es auf der Seite denn eine globale Funktion namens "change"?</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790275#m1790275 MudGuard http://www.andreas-waechter.de/ 2021-07-16T11:08:27Z 2021-07-16T11:08:27Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hi,</p> <blockquote> <pre><code class="block">Dim doc3 = DirectCast(IEApp.Document, IHTMLDocument3) Dim doc2 = DirectCast(IEApp.Document, IHTMLDocument2) Dim target = doc3.getElementById("standardCode") </code></pre> </blockquote> <p>Dein vb-Script kennt jetzt also eine Variable namens target.</p> <blockquote> <pre><code class="block">Call doc2.parentWindow.execScript("target.focus();change()", "JavaScript") </code></pre> </blockquote> <p>Das Javascript kennt die aber nicht. M.E. müßte das getElementById auch im Javascript stehen.</p> <p>Zur Funktion change wurde ja schon geschrieben.</p> <p>cu,<br> Andreas a/k/a MudGuard</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790276#m1790276 Rolf B 2021-07-16T11:32:51Z 2021-07-16T11:32:51Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo MudGuard,</p> <p>da hast Du recht. Man sollte den Eventhandler auf der Seite entkernen und von <code>this</code> unabhängig machen. Den Wert von #standardCode kann man auch über jQuery beschaffen, bzw. man speichert das jQuery-Set in einer Variablen.</p> <pre><code class="block language-html"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token keyword">const</span> $standardCode <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#standardCode"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> $standardCode<span class="token punctuation">.</span><span class="token function">on</span><span class="token punctuation">(</span><span class="token string">"change"</span><span class="token punctuation">,</span> standardCodeChanged<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">standardCodeChanged</span><span class="token punctuation">(</span><span class="token parameter">event</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">let</span> standardCode <span class="token operator">=</span> $standardCode<span class="token punctuation">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">cleanSelect</span><span class="token punctuation">(</span><span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#version"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> </code></pre> <p>Wobei die erste Zeile der Funktion im gezeigten Code überflüssig ist, denn <code>standardCode</code> wird gar nicht verwendet. Vermutlich gibt's noch mehr Code, der darauf zugreift.</p> <p>Und dann aus dem VB heraus nur noch die Funktion aufrufen, statt Events zu simulieren:</p> <pre><code class="block language-vb"><span class="token keyword">Dim</span> doc2 <span class="token operator">=</span> <span class="token keyword">DirectCast</span><span class="token punctuation">(</span>IEApp<span class="token punctuation">.</span>Document<span class="token punctuation">,</span> IHTMLDocument2<span class="token punctuation">)</span> <span class="token keyword">Call</span> doc2<span class="token punctuation">.</span>parentWindow<span class="token punctuation">.</span>execScript<span class="token punctuation">(</span><span class="token string">"standardCodeChanged()"</span><span class="token punctuation">,</span> <span class="token string">"JavaScript"</span><span class="token punctuation">)</span> </code></pre> <p>Beim direkten Aufruf gibt's dann zwar kein Event-Objekt, aber das scheint ja auch nicht erforderlich zu sein. <em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790277#m1790277 Oe 2021-07-16T17:41:38Z 2021-07-16T18:29:16Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Guten Abend Rolf, MudGuard</p> <p>Das vollständige html FIle, das ich befüllen möchte, zur Orientierung anbei:</p> <p>[html datei]( h t t p://gerald.ddnss.org:8080/share.cgi?ssid=0E84F4g)</p> <p><em>Edit Rolf B: Vorsicht, nur mit der Kneifzange anfassen! Das ist keine einfache Vorzeigeseite, das ist komplexer Kram von irgendwoher</em></p> <p><a href="/users/18" class="mention registered-user" rel="noopener noreferrer">@MudGuard</a></p> <pre><code class="block">Call doc2.parentWindow.execScript("standardCode.focus();change()", "JavaScript") </code></pre> <p>läuft in den gleichen Fehler</p> <p>@Rolf</p> <p>Leider verstehe ich deinen Vorschlag nicht.</p> <blockquote> <p>..man speichert das jQuery-Set in einer Variablen.</p> </blockquote> <p>Heißt das, man kann ein zusätzliches Script auf die bestende Webseite ergänzen? ..aus einer Variablen? und dann mit VB.Net ausführen? Falls ja, könntest du ein Beispiel geben, wie ein Script in html ergänzt wird?</p> <p>Viele Grüße</p> <p>Oelkanne</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790278#m1790278 Rolf B 2021-07-16T19:16:28Z 2021-07-16T19:16:28Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <p>wenn das deine Seite ist: Klar kannst Du Script ergänzen. Ist schon genug drin, im app.js sind 112 Module gebündelt, auf etwas mehr kommt's nicht an.</p> <p>Wenn das nicht deine Seite ist: Was tust Du da? Fremde Seiten fernsteuern? Mein Browser bekam erstmal Herzklappenstillstand und warnte mich auf Knien, diese Seite nicht zu speichern.</p> <p>So schlimm war's dann nicht, aber da ist jQuery drin, Underscore, require - über 500k in 112 Modulen einer minifizierten und gebündelten app.js.</p> <p>Den String "standardCode" finde ich gar nicht. Entweder lädt er noch mehr nach, oder baut diesen Namen irgendwie zusammen.</p> <p>Grundsätzlich ein eigenes Script einkleben sollte gehen per:</p> <ul> <li>Script-Element per document.createElement("script") anlegen</li> <li>diesem Element das Script als textContent zuweisen</li> <li>Element an den Head anhängen</li> </ul> <p>Wie Du das auf VB heraus machst? Keine Ahnung.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790279#m1790279 Oe 2021-07-16T21:09:22Z 2021-07-16T21:09:22Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Rolf,</p> <p>Ich bin Nutzer dieser Seiten und befülle diese schon seit Jahren mit meinen VB.NET Tool. Nun gab es die Änderung, das nach erst nach Auswahl eines Punktes des ersten Drop Down Menüs die Inhalte des 2 drop downs nachgeladen werden. Wenn das Zweite ausgewählt wurde, werden die Inhalte für das Dritte nachgeladen usw.</p> <p>Komplex ja, aber nichts illegales!</p> <p>Die ID: standardCode, die für das erste Drop down zuständig ist, findest du in Zeile 361. (Die Auswahl klappt, aber das befeuern des scripts zum Nachladen nicht)</p> <p>Das Javascript "standardCode", welche das Nachladen für das nächste drop down steuert ist in Zeile 649 zu finden.</p> <p>Das mit "Injizieren" von javascript in eine geöffnete Website scheint richtig knifflig. Aber geht das denn? Wird Javasript nicht eigentlich vom Server ausgeführt? (und nicht vom Clientrechner)</p> https://forum.selfhtml.org/self/2021/jun/23/jquery-change-method-automatisches-nachladen-bei-automatisierter-webseitenbestuckung-funktionert-nicht/1790280#m1790280 Rolf B 2021-07-16T23:41:21Z 2021-07-16T23:41:21Z jQuery .change() Method - automatisches Nachladen bei automatisierter Webseitenbestückung funktionert nicht <p>Hallo Oe,</p> <blockquote> <p>Wird Javasript nicht eigentlich vom Server ausgeführt? (und nicht vom Clientrechner)</p> </blockquote> <p>Man kann JavaScript am Server ausführen lassen, aber das ist dann nicht das JavaScript, das Du im Browser siehst.</p> <p>JavaScript im Browser wird vom Browser ausgeführt.</p> <p>Deine Zeilennummern dürften nur funktionieren wenn ich deine Seite tatsächlich aufrufe, statt nur als Text anzuschauen. Da ich nicht erkenne, was sie tut und was sie drive-by mitschleppen könnte, werde ich das nicht machen.</p> <p>Die Idee mit "entkernen" war also Unsinn von mir, ich hatte die Historie des Threads nicht mehr im Kopf.</p> <p>Es könnte aber trotzdem sinnvoll sein, einen eigenen Scriptblock in die Seite einzuschmuggeln und darin eine Funktion aufzurufen. Wenn das denn so geht wie Du es mit execScript angedeutet hast - sowas hab ich noch nicht gemacht.</p> <p>Aber aus einer JavaScript-Funktion heraus das Change-Event zu triggern ist sicherlich einfacher als über VB. Du musst nur aufpassen, dass Du es nicht mehrfach tust. Gib dem Script-Element eine ID und frage ab, ob die ID da ist, bevor Du es erzeugst und einfügst.</p> <p>Wie man in JavaScript ein Change-Event triggert, das hatten wir - glaube ich - in diesem Wurmthread schonmal.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div>