Como faço para que os campos de senha sejam preenchidos automaticamente sem a necessidade de interação do usuário?

Se eu inspecionar um<input type="password"/> do meu script Tampermonkey e observe as alterações usando umchange manipulador de um campo de senha preenchido pelo recurso Gerenciador de Senhas do Chrome, o valor permanece vazio até que eu efetue um clique real na página. Tentei no meu script clicar na página, mas o Chrome sabe que não é um clique real. Quando clico fisicamente na página, ochange evento dispara repentinamente, o campo de senha recebe um valor e, em seguida, meu script reage corretamente (devido a ter ochange evento). Mas eu escrevi esse script para evitar ter que interagir com a página em primeiro lugar, então isso derrota o ponto do meu script.

Existe uma maneira de fazer com que o TamperMonkey marque a página como tendo o usuário interagir com ela (por exemplo, algunsGM_setUserTouched() ouGM_autoFillPasswords() (API)) para que o recurso Gerenciador de Senhas realmente preencha<input type="password"/> sem precisar que eu clique na página?

fundo

No Chrome, esse comportamento está documentado em# 352527 comentário 15 onde é um comportamento inesperado para o repórter e# 398805 em que há um caso em que o Chrome falha na implementação do comportamento que eu não quero. É considerado um recurso que, quando o preenchimento automático e o Gerenciador de Senhas incorporado do Chrome preenchem um formulário, os caracteres da senha são exibidos para o usuário no campo de senha, mas o DOMHTMLInputElement.value está configurado para"". Quando o usuário interage com a página, como clicando nela ou pressionando uma tecla, o Chrome modificaHTMLInputElement.value para conter a senha e umchange evento é disparado no elemento A razão citada para fazer isso é "razões de segurança" (por exemplo, se um script de site estivesse lendo o elemento de senha, ele só teria a chance de fazê-lo se o usuário estivesse olhando a página ... para popunders ou frames não visíveis não seria capaz de fazer isso ou algo assim?Não tenho certeza do que isso protege você: assim que o usuário interagir com a página, todos os scripts terão acesso à senha de qualquer maneira. E se scripts ruins estiverem sendo veiculados da mesma origem que o<input type="password"/>, o site em si tem uma falha de segurança, não o Chrome…)

Greasemonkey historicamente temAPIs auxiliares e um@grant sistema para permitir que o userscript resolva problemas como este. Editar: ao criar o repro (abaixo), descobri que o Firefox disponibiliza a senha de preenchimento automático para o DOM sem esperar o usuário interagir com a janela. Portanto, Greasemonkey não precisa de umGM_forceAutofill() API porque o Firefox não exibe essa peculiaridade do Chrome. Como resultado, o Tampermonkey não possui essa API.

Repro

Como as pessoas não acreditam em mim quando descrevo o comportamento exibido pelo Chrome, preparei uma reprodução. É preciso algum trabalho para que o Chrome chegue a um estado em que ainda não pense que o usuário tenha interagido com a página, mas você poderá ver o que vejo usando estas etapas:

Abra o Chrome. Estou usando o Chrome 61.0.3163.91 de 64 bits no Windows 10.Navegar parahttps://fiddle.jshell.net/xqfynp3e/22/show/light/Digite algum nome de usuário e senha falsos e pressione Enter ou clique no botão. O Chrome deve solicitar que você salve a senha.Salve a senha.Abra as ferramentas do desenvolvedor.Digite isso no console (para navegar até a página sem interagir acidentalmente com ela):window.location.href = 'https://fiddle.jshell.net/xqfynp3e/22/show/light/?1'Corredocument.querySelector('input[type=password]').value no console.Observe aquiloa senha do formulárioaparece ser preenchido visualmente e ainda assim ler o elemento DOM no Console produz"".Clique no documento.Corredocument.querySelector('input[type=password]').value no console novamente.Observe aquiloa senha do formulário não mudou de aparência, e a leitura do elemento DOM no console gera a senha falsa que você salvou.

Minha pergunta, reafirmada: como posso fazer com que o Tampermonkey execute a etapa "Clique no documento"? Como posso informar ao preenchimento automático de senha do Chrome que interagi com a página sem realmente interagir fisicamente com a página?

EDIT: Encontrei uma maneira alternativa de armazenar com segurança senhas no Chrome e acessá-las por meio de scripts de usuários usando o suporte à mediação silenciosa da API da web de credenciais:https://imgur.com/a/ts2W1

questionAnswers(1)

yourAnswerToTheQuestion