JQuery click () en la label de anclaje que no se activa desde un script insertado dentro del control WebBrowser

Estoy desarrollando un bot web usando el control WinForms WebBrowser. Todo funciona bien excepto por la segunda llamada de click() en el siguiente código:

 function SaveRecordClick() { try { var menuButton = $('#s_at_m_4'); menuButton.click(); //<-- This is working var x = $('#s_at_m_4-menu li')[5]; var saveLink = $(x).find('a')[0]; if (saveLink != null){ saveLink.click(); //<-- This is not working return "1"; } } catch (err) { alert(err.message); } return "0"; } 

saveLink no es nulo. Lo sé porque hice una llamada de alert() dentro de la condición.

Código actualizado con soluciones sugeridas

 function SaveRecordClick() { try { var menuButton = $('#s_at_m_4'); menuButton.click(); var x = $('#s_at_m_4-menu li').eq(5); var saveLink = x.find('a').eq(0); if (saveLink != null) { alert(saveLink.html()); saveLink.click(); return "1"; } } catch (err) { alert(err.message); } return "0"; } 

Pero sigue siendo el mismo problema. 'alert ()' funciona bien, pero html() muestra text interno en lugar de HTML del anclaje.

código HTML

 <li data-caption="Save Record [Ctrl+S]" class="sbui-appletmenu-item ui-menu-item" role="presentation"> <a href="javascript:void(0)" aria-disabled="false" class="ui-corner-all" id="ui-id-254" tabindex="-1" role="menuitem">Save Record [Ctrl+S]</a> </li> 

ID de la label de anclaje se genera dinámicamente.

Además, el click() se activa cuando se ejecuta el mismo código desde la Consola Google Chrome. Entonces, ¿podría ser el problema con el control WebBrowser?

Actualizar

Creo que muchachos es un problema con el control webrowser que henetworkinga Internet Explorer. Así que ahora estoy cambiando a otro control de browser y probando el código en él. Te dejaré saber si funciona allí.

13 Solutions collect form web for “JQuery click () en la label de anclaje que no se activa desde un script insertado dentro del control WebBrowser”

Tienes que ajustar tu object con jQuery para que funcione:

  var saveLink = $ ($ (x) .find ('a') [0]); 

Pruebe con las siguientes condiciones:

  1. trigger('click') lugar de click
  2. Cambie la validation de la condición if con if(saveLink) .It valide ambos null,undefined all false statement
  3. Devuelve con number=> 0 lugar de sting =>'0'
  4. anotar el uso de la networkingirección de tags con window.location.href y get el valor href de anchor try con attr('href')
 function SaveRecordClick() { try { var menuButton = $('#s_at_m_4'); menuButton.trigger('click'); var x = $('#s_at_m_4-menu li').eq(5); var saveLink = x.find('a').eq(0); if (saveLink) { alert(saveLink.html()); window.location.href=saveLink.attr('href'); return 1; } } catch (err) { alert(err.message); } return 0; } 

ejemplo de trabajo

 function SaveRecordClick() { try { var menuButton = $('#s_at_m_4'); menuButton.trigger('click'); var x = $('#s_at_m_4-menu li').eq(5); var saveLink = x.find('a').eq(0); if (saveLink) { alert(saveLink.html()); window.location.href=saveLink.attr('href'); return 1; } } catch (err) { alert(err.message); } return 0; } SaveRecordClick() 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="s_at_m_4-menu"> <li></li> <li></li> <li></li> <li></li> <li></li> <li data-caption="Save Record [Ctrl+S]" class="sbui-appletmenu-item ui-menu-item" role="presentation"> <a href="https://example.com" aria-disabled="false" onclick="console.log('s')" class="ui-corner-all" id="ui-id-254" tabindex="-1" role="menuitem">Save Record [Ctrl+S]</a> </li> <li></li> </ul> 

saveLink nunca será null , ya que find / eq siempre devolverá un object jQuery, independientemente de si el elemento o elementos existen o no.

En cambio, intente usar la propiedad length para verificar la existencia:

 if (saveLink.length) 
 function SaveRecordClick() { try { var menuButton = $('#s_at_m_4'); menuButton.click(); var x = $('#s_at_m_4-menu li').eq(5); var saveLink = x.find('a').eq(0); if (saveLink != null) { alert(saveLink.html()); saveLink.live('click');//Use live click return "1"; } } catch (err) { alert(err.message); } return "0"; } 

El savelink debería ser un elemento dom para un control nulo

 var saveLink = $(x).find('a:first')[0]; 

o

 var saveLink = $(x).find('a').eq(0)[0]; 

o

 var saveLink = $(x).find('a').first()[0]; 

No entendí ¿Necesita hacer clic o agregar function en el clic?

Agregar function:

 jQuery('teste').click(function(){console.log('teste')}); 

Hacer clic:

 jQuery('teste').trigger('click'); 

Teste utilizó jQuery.

 jQuery(saveLink).click(function(){ console.log('click!'); }); 

testing esto

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

La mejor forma de lanzar un evento desde JavaScript

 $( "#ID" ).trigger( "click" ); 

Espero que funcione para ti.

Su código actualizado con las soluciones sugeridas es bueno, pero el método .html() obtiene el contenido de un elemento HTML. Por lo tanto, debe usar saveLink.parent().html() para get el HTML externo del anclaje.
Si hay otros elementos en el contenedor principal, puede crear un elemento temporal para get solo hiperlink HTML:

 var anchorHTML = $('<div>').append(saveLink.clone()).html(); 

Para hacer clic en saveLink usando Javascript intente utilizar x.find('a')[0].click() lugar de saveLink.click() .
Usé la URL de tu perfil en el atributo href para claridad visual. Si ejecuta el fragment a continuación, el usuario hará clic en el enlace y se simulará su página de perfil.

 function SaveRecordClick() { try { var x = $('#s_at_m_4-menu li').eq(5); var saveLink = x.find('a').eq(0); if (saveLink != null) { var anchorHTML = $('<div>').append(saveLink.clone()).html(); alert(anchorHTML); saveLink[0].click(); return "1"; } } catch (err) { alert(err.message); } return "0"; } console.log(SaveRecordClick()); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="s_at_m_4-menu"> <li></li> <li></li> <li></li> <li></li> <li></li> <li data-caption="Save Record [Ctrl+S]" class="sbui-appletmenu-item ui-menu-item" role="presentation"> <a href="https://stackoverflow.com/users/1124494/aishwarya-shiva" aria-disabled="false" class="ui-corner-all" id="ui-id-254" tabindex="-1" role="menuitem">Save Record [Ctrl+S]</a> </li> <li></li> </ul> 

Restring una cosa: los frameworks javascript y javascript están basados ​​en events, así que no intentes implementar los conceptos de functional programming.

 $(document).ready(function(){ $("#s_at_m_4").click(function(){ // put your code here }); }); 

Lo que mi teoría acerca de esto es que la function de clic no estaba realmente vinculada al elemento. Esto puede deberse a que el html aún no estaba en la página cuando se ejecuta el script o el enlace del clic. Intente verificar el clic enlazado en saveLink.click ();

intenta hacerlo en el formatting

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

Gracias a todos por sus respuestas y comentarios.

Después de pasar una semana investigando el website de un tercero, hoy finalmente encontré la solución a mi problema. En realidad, el problema no fue con JavaScript o HTML, sino la forma en que el website valida el formulario que estoy tratando de completar automáticamente usando mi bot.

Logré recompensa por la respuesta cuya conversación en comentarios me dio algunas pistas.

El clic en saveLink no se saveLink porque programáticamente establecía el valor de un textbox con .val() pero, por algún motivo, el website no guardaba los valores establecidos directamente con esta function. Pero cuando cambié el valor usando un cuadro combinado que carga valor para el textbox del server (aunque el valor establecido desde el server o usando la function val() son exactamente los mismos), el clic se activó con éxito después de eso.

También utilicé setTimeout() en varios lugares porque el código se estaba ejecutando demasiado rápido antes de que el valor se pueda establecer en algunos campos de formulario.

Entonces, en el futuro, si alguien enfrenta un problema similar, asegúrese de estudiar el comportamiento de la página o formulario que está tratando de enviar.

  • ¿Cómo llamar a javascript dentro de un control WebBrowser en winforms?
  • Invoque un script en WebBrowser y espere a que termine de ejecutarse (sincronizado)
  • Geolocalización en la aplicación WinForms
  • ¿Invocar la API de JavaScript de Google Maps API V3 desde la aplicación Windows Forms?
  • Cómo inyectar Javascript en el control WebBrowser?
  • Cómo llamar a la acción de inicio de session de la API web desde la aplicación de formulario de Windows
  • ¿Deshabilita javascript en el control WinForms WebBrowser?
  • Cómo manejar events de JavaScript a través del control WebBrowser para WinForms
  • System.Windows.Forms.WebBrowser no ejecuta Javascript
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.