¿Cómo consigo que los campos de contraseña se llenen automáticamente sin requerir la interacción del usuario?

Si inspecciono un<input type="password"/> de mi script Tampermonkey y observar los cambios usando unchange controlador para un campo de contraseña que se completa con la función Administrador de contraseñas de Chrome, el valor permanece vacío hasta que físicamente realizo un clic real en la página. He intentado en mi script hacer clic en la página, pero Chrome sabe que no es un clic real. Cuando hago clic físicamente en la página, elchange el evento se dispara repentinamente, el campo de contraseña obtiene un valor y luego mi script reacciona correctamente (debido a que elchange evento). Pero escribí este script para evitar tener que interactuar con la página en primer lugar, por lo que esto frustra el punto de mi script.

¿Hay alguna manera de hacer que TamperMonkey marque la página como si el usuario hubiera interactuado con ella (por ejemplo, algunos hipotéticosGM_setUserTouched() oGM_autoFillPasswords() API) para que la función Administrador de contraseñas realmente llene el<input type="password"/> adentro sin requerir que haga clic en la página?

Antecedentes

En Chrome, este comportamiento está documentado en# 352527 comentario 15 donde es un comportamiento inesperado para el reportero y# 398805 donde hay un caso en el que Chrome no implementa el comportamiento que no deseo. Se considera una característica que cuando el autocompletado y el Administrador de contraseñas incorporado de Chrome completan un formulario, los caracteres de la contraseña se muestran al usuario en el campo de contraseña, pero el DOMHTMLInputElement.value se establece en"". Cuando el usuario interactúa con la página, como haciendo clic en ella o presionando una tecla, Chrome modificaHTMLInputElement.value para contener la contraseña y unchange El evento se dispara al elemento. La razón citada para hacer esto es "razones de seguridad" (p. Ej., Si un script del sitio web estaba leyendo el elemento de contraseña, solo tendría la oportunidad de hacerlo si el usuario estaba mirando la página ... por lo tanto, popunders o marcos no visibles no podría hacerlo o algo?No estoy seguro de qué lo protege esto: una vez que el usuario interactúa con la página, todos los scripts tendrán acceso a la contraseña de todos modos. Y si los scripts incorrectos se están sirviendo desde el mismo origen que el<input type="password"/>, el sitio web en sí tiene una falla de seguridad, no Chrome ...)

Greasemonkey históricamente tieneAPI de ayuda y un@grant sistema para permitir que el script de usuario solucione problemas como este. Editar: al crear la reproducción (a continuación), descubrí que Firefox hace que la contraseña de autocompletar esté disponible para el DOM sin esperar a que el usuario interactúe con la ventana. Por lo tanto, Greasemonkey no necesita unGM_forceAutofill() API porque Firefox no muestra esta peculiaridad de Chrome. Como resultado, Tampermonkey no tiene dicha API.

Repro

Debido a que la gente no me cree cuando describo el comportamiento exhibido por Chrome, he preparado un repro. Se necesita algo de trabajo para que Chrome llegue a un estado en el que no cree que el usuario haya interactuado con la página todavía, pero debería poder ver lo que veo usando estos pasos:

Abra Chrome Estoy usando Chrome 61.0.3163.91 de 64 bits en Windows 10.Navegar ahttps://fiddle.jshell.net/xqfynp3e/22/show/light/Ingrese un nombre de usuario y contraseña falsos y presione enter o haga clic en el botón. Chrome debería solicitarle que guarde la contraseña.Guarda la contraseña.Herramientas para desarrolladores abiertos.Ingrese esto en la consola (para navegar a la página sin interactuar accidentalmente con ella):window.location.href = 'https://fiddle.jshell.net/xqfynp3e/22/show/light/?1'correrdocument.querySelector('input[type=password]').value en la consolaObserva esola contraseña del formularioaparece para completar visualmente y, sin embargo, leer el elemento DOM en la consola produce"".Haga clic en el documento.correrdocument.querySelector('input[type=password]').value en la consola de nuevo.Observa esola contraseña del formulario no ha cambiado de apariencia y, sin embargo, leer el elemento DOM en la consola produce la contraseña falsa que guardó.

Mi pregunta, reformulada: ¿cómo puedo hacer que Tampermonkey realice el paso "Haga clic en el documento"? ¿Cómo le digo al relleno automático de contraseñas de Chrome que he interactuado con la página sin interactuar físicamente con la página?

EDITAR: He encontrado una forma alternativa de almacenar de forma segura las contraseñas en Chrome y acceder a ellas a través de los scripts de usuario utilizando el soporte de mediación silenciosa de Credentials Web API:https://imgur.com/a/ts2W1

Respuestas a la pregunta(1)

Su respuesta a la pregunta