0% acharam este documento útil (0 voto)
22 visualizações4 páginas

User Script

Este é um script de usuário para preenchimento automático de formulários no site de vistos da VFS Portugal. Ele permite que usuários selecionem perfis pré-definidos com informações pessoais, como nome, data de nascimento e nacionalidade, que são preenchidas automaticamente nos campos correspondentes do formulário. O script utiliza uma interface personalizada que aparece na tela para facilitar a seleção dos perfis.

Enviado por

Edgar Sacala
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
22 visualizações4 páginas

User Script

Este é um script de usuário para preenchimento automático de formulários no site de vistos da VFS Portugal. Ele permite que usuários selecionem perfis pré-definidos com informações pessoais, como nome, data de nascimento e nacionalidade, que são preenchidas automaticamente nos campos correspondentes do formulário. O script utiliza uma interface personalizada que aparece na tela para facilitar a seleção dos perfis.

Enviado por

Edgar Sacala
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 4

// ==UserScript==

// @name Vfs PORTUGAL Overlay


// @namespace http://tampermonkey.net/
// @version 1.9
// @description Preenchimento automático com interface personalizada
// @author MaurícioJS
// @match https://visa.vfsglobal.com/*
// ==/UserScript==

(function () {
'use strict';

const campos = {
primeiro_nome: '[placeholder="Enter your first name"]',
ultimo_nome: '[placeholder="Please enter last name."]',
data_nascimento: '#dateOfBirth',
nacionalidade: '.mat-select-value', // Para nacionalidade
sexo: '.mat-select-value', // Para sexo
data_exp: '#passportExpirtyDate',
numero_passaporte: '[placeholder="Enter passport number"]',
numero_telefone: '[placeholder="012345648382"]',
email: '[placeholder="Enter Email Address"]',
codigo_discagem: '[placeholder="44"]',
};

const dadosPerfis = [
{
id: "Pro1",
nome: "Daniel SCHENG",
dados: {
primeiro_nome: "DANIEL FORTUNATO DA CONCEIÇÃO",
ultimo_nome: "SETAS",
data_nascimento: "16/07/2005",
nacionalidade: "ANGOLA",
sexo: "Male",
data_exp: "24/05/2033",
numero_passaporte: "N3052256",
codigo_discagem: "244",
numero_telefone: "954908685",
email: "[email protected]",
},
},
{
id: "Pro2",
nome: "licardo sheng",
dados: {
primeiro_nome: "JOEL LEITÃO",
ultimo_nome: "MATIAS",
data_nascimento: "22/11/2001",
nacionalidade: "ANGOLA",
sexo: "Male",
data_exp: "30/10/2033",
numero_passaporte: "N3169704",
codigo_discagem: "244",
numero_telefone: "954908685",
email: "[email protected]",
},
},
{
id: "Pro3",
nome: "Kliverth nacional",
dados: {
primeiro_nome: "KLIVERTH PEDRO FERNANDES",
ultimo_nome: "NETO",
data_nascimento: "06/01/2006",
nacionalidade: "ANGOLA",
sexo: "Male",
data_exp: "01/04/2034",
numero_passaporte: "N3226649",
codigo_discagem: "244",
numero_telefone: "954908685",
email: "[email protected]",
},
},
{
id: "Pro4",
nome: "miro sheng",
dados: {
primeiro_nome: "CANHALA AURÉLIO",
ultimo_nome: "SAMBA",
data_nascimento: "17/04/2003",
nacionalidade: "ANGOLA",
sexo: "Male",
data_exp: "27/02/2033",
numero_passaporte: "N2988288",
codigo_discagem: "244",
numero_telefone: "954908685",
email: "[email protected]",
},
},
{
id: "Pro5",
nome: "CASTRO schenguein",
dados: {
primeiro_nome:"CASTRO",
ultimo_nome: "PEDRO",
data_nascimento: "02/01/1986",
nacionalidade: "ANGOLA",
sexo: "Male",
data_exp: "06/12/2026",
numero_passaporte: "N2123376",
codigo_discagem: "244",
numero_telefone: "957876543",
email: "[email protected]",
},
},
];
function criarPainel() {
const painel = document.createElement("div");
painel.id = "painel-preenchimento";
painel.style = `
position: fixed;
top: 10px;
right: 20%;
width: auto;
max-width: 300px;
background: rgba(0, 0, 0, 0.8);
color: white;
border-radius: 5px;
z-index: 9999;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5);
padding: 10px;
font-family: Arial, sans-serif;
display: flex;
flex-wrap: wrap;
gap: 5px;
justify-content: center;
`;

dadosPerfis.forEach((perfil) => {
const button = document.createElement("button");
button.textContent = perfil.nome;
button.style = `
padding: 5px 10px;
border: none;
border-radius: 5px;
font-size: 12px;
cursor: pointer;
background-color: #03b131;
color: white;
font-weight: bold;
`;
button.addEventListener("click", () => preencherCampos(getCampos(),
perfil.dados));
painel.appendChild(button);
});

document.body.appendChild(painel);
}

function getCampos() {
return Object.fromEntries(
Object.entries(campos).map(([key, selector]) => [key,
document.querySelector(selector)])
);
}

function atualizarCampo(campo, valor) {


if (campo) {
campo.value = valor || "";
campo.dispatchEvent(new Event("input", { bubbles: true }));
campo.dispatchEvent(new Event("change", { bubbles: true }));
}
}

function preencherCampos(campos, dados) {


Object.entries(dados).forEach(([key, value]) => {
if (key === "nacionalidade" || key === "sexo") {
selecionarOpcaoPorTexto(campos[key], value);
} else {
atualizarCampo(campos[key], value);
}
});
}

function selecionarOpcaoPorTexto(campo, texto) {


if (!campo) {
console.warn("Campo não encontrado para selecionar opção.");
return;
}

// Abrir o dropdown
campo.click();

// Aguardar o dropdown abrir e localizar a opção


setTimeout(() => {
const opcoes = [...document.querySelectorAll("mat-option .mat-option-
text")];
const opcao = opcoes.find(
(opt) => opt.textContent.trim().toLowerCase() ===
texto.trim().toLowerCase()
);

if (opcao) {
opcao.parentElement.click();
} else {
console.warn("Opção com texto ","${texto}"," não encontrada.");
}
}, 500);
}

criarPainel();
})();

Você também pode gostar