JQuery click () auf das Anchor-Tag, das nicht von einem injizierten Skript innerhalb des WebBrowser-Steuerelements ausgeht

9

Ich entwickle einen Web-Bot mit dem WinForms WebBrowser-Steuerelement. Alles funktioniert gut außer dem zweiten click() Aufruf im folgenden Code:

%Vor%

saveLink ist nicht null. Ich weiß das, weil ich einen alert() Aufruf innerhalb der Bedingung platziert habe.

Aktualisierter Code mit vorgeschlagenen Lösungen

%Vor%

Aber immer noch das gleiche Problem. 'alert ()' funktioniert gut, aber html() zeigt inneren Text anstelle von HTML des Ankers.

HTML-Code

%Vor%

ID des Anker-Tags wird dynamisch generiert.

Außerdem wird click() ausgelöst, wenn derselbe Code von der Google Chrome-Konsole aus ausgeführt wird. Könnte es also das Problem mit dem WebBrowser-Steuerelement sein?

Aktualisieren

Ich denke, es ist ein Problem mit dem Webbrowser-Steuerelement, das Internet Explorer erbt. Jetzt wechsle ich zu einer anderen Browsersteuerung und teste den Code darauf. Lass dich wissen, ob es dort funktioniert.

    
Aishwarya Shiva 26.05.2017, 15:52
quelle

13 Antworten

0

Vielen Dank für Ihre Antworten und Kommentare.

Nachdem ich eine Woche lang die Website von Dritten recherchiert habe, habe ich heute endlich die Lösung für mein Problem gefunden. Eigentlich war das Problem nicht mit JavaScript oder HTML, sondern mit der Art, wie die Webseite das Formular validiert, das ich mit meinem Bot automatisch ausfüllen möchte.

Ich habe der Antwort Kopfgeld gegeben, deren Konversation in Kommentaren mir einige Hinweise gegeben hat.

Der Klick auf saveLink wurde nicht ausgelöst, weil ich den Wert eines Textfelds mit .val() programmiert hatte, aber aus irgendeinem Grund hat die Website keine Werte gespeichert, die direkt mit dieser Funktion eingestellt wurden. Aber wenn ich den Wert mithilfe eines Kombinationsfelds änderte, das den Wert für das Textfeld vom Server lädt (Obwohl der vom Server festgelegte Wert oder die val() -Funktion genau gleich sind.), Wurde der Klick danach erfolgreich ausgeführt.

Ich habe auch setTimeout() an verschiedenen Stellen verwendet, weil der Code zu schnell ausgeführt wurde, bevor der Wert in einigen Formularfeldern gesetzt werden konnte.

Wenn Sie in Zukunft ein ähnliches Problem haben, sollten Sie das Verhalten der Seite oder des Formulars, das Sie übermitteln möchten, genau studieren.

    
Aishwarya Shiva 06.06.2017, 14:37
quelle
1

Sie müssen Ihr Objekt mit jQuery umschließen, damit es funktioniert:

%Vor%     
Ursache 26.05.2017 15:53
quelle
1

Probieren Sie mit der Bedingung Below:

aus
  
  1. trigger('click') statt click
  2.   
  3. Ändern Sie die Validierung der if-Bedingung mit if(saveLink) .Its validiert sowohl null,undefined all false statement
  4.   
  5. Rückgabe mit number=> 0 anstelle von sting =>'0'
  6.   
  7. anchor -Tag-Umleitung verwenden Sie mit window.location.href und erhalten Sie den href -Wert von anchor try mit attr('href')
  8.   
%Vor%

Arbeitsbeispiel

%Vor% %Vor%
    
prasanth 03.06.2017 09:49
quelle
0

saveLink wird nie null sein, da find / eq immer ein jQuery-Objekt zurückgibt, unabhängig davon, ob das Element oder die Elemente vorhanden sind oder nicht.

Versuchen Sie stattdessen, mit der Eigenschaft length nach Existenz zu suchen:

%Vor%     
Bᴜᴅɪ 30.05.2017 23:03
quelle
0
%Vor%     
Uday 31.05.2017 10:27
quelle
0

savelink sollte ein dom-Element für die Nullprüfung sein

%Vor%

oder

%Vor%

oder

%Vor%     
Mert Cingoz 31.05.2017 10:43
quelle
0

Ich habe es nicht verstanden Müssen Sie klicken oder Funktion in den Klick hinzufügen?

Funktion hinzufügen:

%Vor%

Klicken Sie auf

%Vor%     
Mateus Veloso 31.05.2017 15:57
quelle
0

Teste verwendet jQuery.

%Vor%     
Mateus Veloso 01.06.2017 11:49
quelle
0

probiere das

aus

$(document).on('click',$(saveLink),function(event){ ///your code })

    
abelh2200 01.06.2017 17:36
quelle
0

Der beste Weg, um eine Veranstaltung von JavaScript zu feuern

%Vor%

Ich hoffe, es wird für Sie funktionieren.

    
user2922221 02.06.2017 10:35
quelle
0

Ihr aktualisierter Code mit vorgeschlagenen Lösungen ist gut, aber die Methode .html() erhält den Inhalt eines HTML-Elements. Daher müssen Sie saveLink.parent().html() verwenden, um das äußere HTML des Ankers zu erhalten.
Wenn andere Elemente im übergeordneten Container vorhanden sind, können Sie ein temporäres Element erstellen, um nur hiperlink HTML zu erhalten:

%Vor%

Um auf saveLink mit Javascript zu klicken, versuchen Sie x.find('a')[0].click() anstelle von saveLink.click() zu verwenden.
Ich habe die URL Ihres Profils im Attribut href für visuelle Klarheit verwendet. Wenn Sie das unten stehende Snippet ausführen, wird ein Nutzerklick auf den Link simuliert und Ihre Profilseite wird angezeigt.

%Vor% %Vor%
    
Alexander 02.06.2017 09:37
quelle
0

Denken Sie daran, dass javascript und javascript Frameworks ereignisgesteuert sind. Versuchen Sie also nicht, die funktionalen Programmierkonzepte zu implementieren.

%Vor%     
Shubham Bansal 06.06.2017 00:22
quelle
0

Was meine Theorie darüber ist, dass die Klickfunktion nicht wirklich an das Element gebunden war. Dies kann daran liegen, dass der HTML-Code noch nicht auf der Seite war, als das Skript oder die Bindung von click ausgeführt wurde. Überprüfe den gebundenen Klick in saveLink.click ();

versuche es im Format

$(body).delegate(saveLink, 'click', function() { //try alert here to check });

    
perseusl 06.06.2017 07:08
quelle

Tags und Links