javascript - por - publicar comentarios en la página de Facebook a través de la consola
share facebook javascript (2)
Los cuadros de comentarios actuales no son un <textarea>
tradicional dentro de una <form>
. Están usando el atributo contenteditable en un div. Para enviar en este escenario, querrá escuchar uno de los eventos del teclado ( keydown
, keyup
, keyup
) y buscar la tecla Enter
que es el código clave 13.
Parece que FB está escuchando el keydown
en este caso, así que cuando ejecuté este código pude falsificar enviar un comentario:
function fireEvent(type, element) {
var evt;
if(document.createEvent) {
evt = document.createEvent("HTMLEvents");
evt.initEvent(type, true, true);
} else {
evt = document.createEventObject();
evt.eventType = type;
}
evt.eventName = type;
evt.keyCode = 13;
evt.which = 13;
if(document.createEvent) {
element.dispatchEvent(evt);
} else {
element.fireEvent("on" + evt.eventType, evt);
}
}
fireEvent(''keydown'', document.querySelector(''[role="combobox"]._54-z span span''));
Un par de cosas para tener en cuenta sobre esto. La clase ._54-z
era una clase que acababan de usar en mi página. Su experiencia puede ser diferente. Usa las herramientas de desarrollo para asegurarte de que tomas el elemento correcto (debe tener el rol de aria "cuadro combinado"). Además, si estás buscando admitir navegadores más antiguos, vas a tener que modificar el código de función fireEvent
anterior. Solo probé el ejemplo anterior en el último Chrome.
Finalmente, para complicar las cosas, Facebook usa React, que crea una representación DOM virtual de la página actual. Si está escribiendo manualmente los caracteres en el cuadro combinado y luego ejecuta el código anterior, funcionará como se esperaba. Pero no podrá establecer el innerHTML interno de <span>
de la lista desplegable a lo que está buscando hacer y luego desencadenará la keydown
. Es probable que necesite activar el evento de change
en el cuadro combinado para asegurarse de que su mensaje persista en el DOM virtual.
¡Eso debería hacerte comenzar! ¡Espero que ayude!
Como en la imagen, el cuadro de comentarios de Facebook no tiene botón de enviar, cuando escribes algo y presionas el botón Enter, el comentario publicado.
Quiero enviar el comentario a través de JavaScript que se ejecuta en la consola. pero intenté activar el evento Enter, enviar evento del DOM. No pude hacer que funcione.
Aquí hay una solución de trabajo después de 3 semanas de experimentación (utilizando la función fireEvent
@Benjamin Solum):
- esta versión publica un comentario solo para la primera publicación en la página (mediante el método
querySelector
) esta versión solo se puede usar en su muro personal (a menos que cambie los selectores de consultas)
function fireEvent(type, element, keyCode) { var evt; if(document.createEvent) { evt = document.createEvent("HTMLEvents"); evt.initEvent(type, true, true); } else { evt = document.createEventObject(); evt.eventType = type; } evt.eventName = type; if (keyCode !== undefined){ evt.keyCode = keyCode; evt.which = keyCode; } if(document.createEvent) { element.dispatchEvent(evt); } else { element.fireEvent("on" + evt.eventType, evt); } } // clicking the comment link - it reveals the combobox document.querySelector(".fbTimelineSection .comment_link").click(); setTimeout(function(){ var combobox = document.querySelector(".fbTimelineSection [role=''combobox'']"); var spanWrapper = document.querySelector(".fbTimelineSection [role=''combobox''] span"); // add text to the combobox spanWrapper.innerHTML = "<span data-text=''true''>Thank you!</span>"; var spanElement = document.querySelector(".fbTimelineSection [role=''combobox''] span span"); fireEvent("blur", combobox); fireEvent("focus", combobox); fireEvent("input", combobox); fireEvent("keydown", spanElement, 13); // pushing enter },2000);