Entonces, estoy usando el js de la pesadilla, y me gusta simular un procedimiento de inicio de sesión, para hacerlo, uso el js de la pesadilla así.
function testiiing(){ nightmare .goto('http://localhost:4200/login') .type('#name', 'test') .type('#pwd', 'test') .click('#log') .evaluate(function() { return //something }) .then(function(result) { console.log(result); }) .then(function() { console.log('done'); }) .catch(function(error){ console.error('an error has occurred: ' + error); }); }La cuestión es que me gustaría cambiar "//algo" por algo que me devuelva "name=test&pwd=test" (así que la solicitud de publicación de ajax), ¿alguien puede ayudarme o decirme si es posible?
no tengo experiencia con pesadilla js, pero como ha etiquetado jQuery, simplemente use .serialize()
https://api.jquery.com/serialize/
El método
.serialize()crea una cadena de texto en notación codificada de URL estándar. Puede actuar sobre un objeto jQuery que tiene controles de formulario individuales seleccionados, como<input>,<textarea>y<select>:$( "input, textarea, select" ).serialize();
Ejemplo:
$( "form" ).on( "submit", function( event ) { event.preventDefault(); console.log( $( this ).serialize() ); });Esto debería hacer exactamente lo que estás buscando.
Para su ejemplo específico, también busque en .serializeArray()
Sé que esto es viejo, pero esto también fue complicado para mí. Esto es lo que estoy usando y funciona:
test(){ let selector = "#twd"; return this.nightmare .goto("https://time.is/") .inject("js", "jquery.js") //actually injects jquery, which doesn't exist on the site .evaluate((selector) =>{ return new Promise((resolve, reject) =>{ // resolve(document.querySelector(selector).innerHTML) $.ajax({ url: "https://jsonplaceholder.typicode.com/posts", type: "POST", data: {foo: "bar"}, }) .then(response =>{ resolve(response) //resolve the promise from browser and resume execution in node }) }) }, selector) //can only pass in one param .then(result =>{ let x = result; }) } //result = {id: some number}Observe el selector, debe ser un parámetro o un objeto si desea más valores clave. En realidad, no se usa en este ejemplo de mierda, pero es solo un ejemplo de mierda.
Y por alguna razón, el estilo js dentro de la devolución de llamada de evaluación podría manejar el código de estilo es6.
Además, la cadena de promesa interna es completamente diferente a la externa. Todo dentro de la evaluación se ejecuta en electron, NO en su servidor de nodo. Pero una vez que resuelve, se recupera en node.