您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Tự động đăng ký Gmail giả lập hành vi người dùng
// ==UserScript== // @name Auto Gmail Registration // @namespace http://tampermonkey.net/ // @version 1.0 // @description Tự động đăng ký Gmail giả lập hành vi người dùng // @author You // @match https://accounts.google.com/signup* // @grant none // ==/UserScript== (function() { 'use strict'; /** * Auto Gmail Registration Script * Mô phỏng hành vi người dùng thực khi đăng ký tài khoản Gmail * * Hướng dẫn sử dụng: * 1. Mở trang đăng ký Gmail: https://accounts.google.com/signup * 2. Mở DevTools (F12) và chuyển sang tab Console * 3. Dán toàn bộ mã này vào Console và nhấn Enter * 4. Script sẽ tự động điền thông tin và tiến hành đăng ký */ // Cấu hình const CONFIG = { // Thời gian chờ tối đa cho trang tải (ms) pageLoadTimeout: 15000, // Số lần thử lại khi gặp lỗi maxRetries: 3, // Ngôn ngữ ưu tiên (vi hoặc en) preferredLanguage: 'vi', // Tỷ lệ chọn giới tính nam (0-1) maleRatio: 0.7, // Độ tuổi ngẫu nhiên minAge: 18, maxAge: 40, // Ghi log chi tiết verboseLogging: true }; // Danh sách họ và tên phổ biến Việt Nam const hoViet = ["Nguyễn", "Trần", "Lê", "Phạm", "Hoàng", "Huỳnh", "Phan", "Vũ", "Võ", "Đặng", "Bùi", "Đỗ", "Hồ", "Ngô", "Dương", "Lý"]; const tenViet = ["Anh", "Bình", "Chi", "Dũng", "Dung", "Hải", "Hạnh", "Hòa", "Huy", "Khoa", "Khánh", "Lan", "Linh", "Mai", "Minh", "Nam", "Ngọc", "Phúc", "Quân", "Quyên", "Sơn", "Tâm", "Thảo", "Thành", "Thắng", "Thu", "Trang", "Trung", "Tuấn", "Vy"]; // Lưu trữ thông tin đăng ký const registrationInfo = { firstName: '', lastName: '', birthDay: '', birthMonth: '', birthYear: '', gender: '', username: '', password: '', recoveryEmail: '', phoneNumber: '' }; // Hàm tiện ích function random(arr) { return arr[Math.floor(Math.random() * arr.length)]; } function randomInt(min, max) { return Math.floor(min + Math.random() * (max - min + 1)); } function delay(minMs, maxMs) { const ms = minMs + Math.random() * (maxMs - minMs); return new Promise(resolve => setTimeout(resolve, ms)); } // Mô phỏng hành vi người dùng async function moveMouseRandomly(element) { if (!element) return; // Mô phỏng di chuyển chuột không hoàn hảo const rect = element.getBoundingClientRect(); const centerX = rect.left + rect.width / 2; const centerY = rect.top + rect.height / 2; // Tạo điểm đích ngẫu nhiên gần trung tâm phần tử const targetX = centerX + randomInt(-10, 10); const targetY = centerY + randomInt(-5, 5); // Giả lập di chuyển chuột const mouseEvent = new MouseEvent('mousemove', { bubbles: true, clientX: targetX, clientY: targetY }); element.dispatchEvent(mouseEvent); await delay(50, 150); } // Hàm gõ từng ký tự như người thật async function typeLikeHuman(element, text) { if (!element) return false; // Di chuyển chuột đến phần tử trước khi gõ await moveMouseRandomly(element); // Focus vào phần tử element.focus(); element.value = ''; // Thỉnh thoảng dừng lại giữa chừng khi gõ for (let i = 0; i < text.length; i++) { // Thêm ký tự element.value += text[i]; element.dispatchEvent(new Event('input', { bubbles: true })); // Tốc độ gõ không đều const typingSpeed = randomInt(80, 200); await delay(typingSpeed, typingSpeed + 50); // Thỉnh thoảng dừng lại như đang suy nghĩ if (i > 0 && i < text.length - 1 && Math.random() < 0.1) { await delay(300, 800); } } return true; } // Hàm nhấp chuột như người thật async function clickLikeHuman(element) { if (!element) return false; // Di chuyển chuột đến phần tử await moveMouseRandomly(element); // Đôi khi cuộn đến phần tử trước khi nhấp if (Math.random() < 0.7) { element.scrollIntoView({ behavior: 'smooth', block: 'center' }); await delay(300, 700); } // Nhấp chuột element.click(); return true; } // Hàm chọn từ dropdown như người thật async function selectFromDropdown(dropdownSelector, optionValue) { const dropdown = document.querySelector(dropdownSelector); if (!dropdown) return false; // Mở dropdown await clickLikeHuman(dropdown); await delay(200, 500); // Chọn option return new Promise(resolve => { setTimeout(async () => { const options = document.querySelectorAll(`${dropdownSelector.split(' ')[0]} [role="listbox"] li`); if (options.length > 0) { let targetOption; if (typeof optionValue === 'number' && optionValue >= 0 && optionValue < options.length) { targetOption = options[optionValue]; } else if (typeof optionValue === 'string') { for (const option of options) { if (option.innerText.includes(optionValue)) { targetOption = option; break; } } } if (targetOption) { await clickLikeHuman(targetOption); resolve(true); } else { resolve(false); } } else { resolve(false); } }, randomInt(300, 600)); }); } // Hàm tìm và nhấn nút Next async function findAndClickNextButton() { // Tìm nút Next/Tiếp theo dựa trên nhiều selector khác nhau const selectors = [ 'button span.VfPpkd-vQzf8d', 'span.VfPpkd-vQzf8d', 'button[type="submit"]', 'button.VfPpkd-LgbsSe-OWXEXe-k8QpJ' ]; // Các từ khóa có thể xuất hiện trên nút (hỗ trợ đa ngôn ngữ) const nextButtonTexts = ['Next', 'Tiếp theo', 'Tiếp tục', 'Continue']; for (const selector of selectors) { const elements = document.querySelectorAll(selector); for (const element of elements) { const elementText = element.textContent.trim(); const buttonText = element.closest('button')?.innerText.trim() || ''; // Kiểm tra nếu text của element hoặc button chứa bất kỳ từ khóa nào const isNextButton = nextButtonTexts.some(text => elementText === text || buttonText === text || elementText.includes(text) || buttonText.includes(text) ); if (isNextButton) { const buttonToClick = element.closest('button') || element; const result = await clickLikeHuman(buttonToClick); if (result) { console.log(`✅ Đã nhấn nút ${elementText || buttonText}`); return true; } } } } // Thử tìm nút dựa trên class đặc biệt const specialButtons = document.querySelectorAll('button.VfPpkd-LgbsSe-OWXEXe-k8QpJ'); for (const button of specialButtons) { if (button.innerText) { const result = await clickLikeHuman(button); if (result) { console.log(`✅ Đã nhấn nút ${button.innerText.trim()}`); return true; } } } console.log('❌ Không tìm thấy nút Next/Tiếp theo'); return false; } // Hàm tạo mật khẩu mạnh ngẫu nhiên function generateStrongPassword() { const lowercase = 'abcdefghijkmnopqrstuvwxyz'; const uppercase = 'ABCDEFGHJKLMNPQRSTUVWXYZ'; const numbers = '23456789'; const symbols = '!@#$%^&*'; // Tạo mật khẩu với ít nhất 1 ký tự từ mỗi loại let password = ''; password += lowercase.charAt(Math.floor(Math.random() * lowercase.length)); password += uppercase.charAt(Math.floor(Math.random() * uppercase.length)); password += numbers.charAt(Math.floor(Math.random() * numbers.length)); password += symbols.charAt(Math.floor(Math.random() * symbols.length)); // Thêm các ký tự ngẫu nhiên cho đủ độ dài 10-16 ký tự const allChars = lowercase + uppercase + numbers + symbols; const length = randomInt(8, 12); // Tổng cộng sẽ là 12-16 ký tự for (let i = 0; i < length; i++) { password += allChars.charAt(Math.floor(Math.random() * allChars.length)); } // Xáo trộn mật khẩu return password.split('').sort(() => 0.5 - Math.random()).join(''); } // Hàm tạo tên người dùng Gmail ngẫu nhiên function generateUsername(firstName, lastName) { const separators = ['', '.', '_']; const separator = random(separators); // Loại bỏ dấu tiếng Việt const normalizedFirstName = firstName.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(); const normalizedLastName = lastName.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(); // Tạo các biến thể tên người dùng độc đáo const randomSuffix = () => { const chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; for (let i = 0; i < 4; i++) { result += chars.charAt(Math.floor(Math.random() * chars.length)); } return result; }; const variants = [ `${normalizedFirstName}${separator}${normalizedLastName}${randomSuffix()}`, `${normalizedLastName}${separator}${normalizedFirstName}${randomSuffix()}`, `${normalizedFirstName}${separator}${randomSuffix()}${randomInt(1, 99)}`, `${normalizedFirstName.charAt(0)}${separator}${normalizedLastName}${randomSuffix()}`, `${randomSuffix()}${separator}${normalizedFirstName}${randomInt(1, 999)}`, ]; return random(variants); } // Hàm điền thông tin ngày sinh và giới tính async function fillBirthdayAndGender() { // Tạo ngày sinh hợp lệ const currentYear = new Date().getFullYear(); const minAge = CONFIG.minAge; const maxAge = CONFIG.maxAge; const year = randomInt(currentYear - maxAge, currentYear - minAge); const month = randomInt(1, 12); const day = randomInt(1, 28); // Để an toàn, chọn đến ngày 28 thôi // Lưu thông tin vào đối tượng registrationInfo registrationInfo.birthDay = day; registrationInfo.birthMonth = month; registrationInfo.birthYear = year; console.log(`📅 Ngày sinh: ${day}/${month}/${year}`); // Điền ngày - hỗ trợ cả tiếng Anh và tiếng Việt const dayInput = document.querySelector('input[aria-label="Day"], input[aria-label="Ngày"]'); if (dayInput) { await typeLikeHuman(dayInput, day.toString()); await delay(300, 700); } // Điền năm - hỗ trợ cả tiếng Anh và tiếng Việt const yearInput = document.querySelector('input[aria-label="Year"], input[aria-label="Năm"]'); if (yearInput) { await typeLikeHuman(yearInput, year.toString()); await delay(400, 800); } // Chọn tháng từ dropdown - hỗ trợ cả tiếng Anh và tiếng Việt await selectFromDropdown('#month [role="combobox"]', month - 1); await delay(500, 1000); // Chọn giới tính từ dropdown (hỗ trợ cả tiếng Anh và tiếng Việt) const genderOptions = { vi: ['Nam', 'Nữ'], en: ['Male', 'Female'] }; // Xác định giới tính dựa trên tỷ lệ nam đã cấu hình const isMale = Math.random() < CONFIG.maleRatio; // Lưu giới tính vào registrationInfo theo tiếng Việt để hiển thị log registrationInfo.gender = isMale ? 'Nam' : 'Nữ'; // Tìm dropdown giới tính const genderDropdown = document.querySelector('#gender [role="combobox"]'); if (!genderDropdown) { console.log('❌ Không tìm thấy dropdown giới tính'); return false; } // Xác định ngôn ngữ hiện tại của form dựa trên các option có sẵn const dropdownText = genderDropdown.textContent.trim(); const isEnglishForm = dropdownText.includes('Gender') || document.querySelector('#gender li[role="option"]')?.textContent.includes('Male'); // Chọn giới tính phù hợp với ngôn ngữ của form const genderToSelect = isEnglishForm ? (isMale ? 'Male' : 'Female') : (isMale ? 'Nam' : 'Nữ'); const success = await selectFromDropdown('#gender [role="combobox"]', genderToSelect); if (success) { console.log(`👤 Giới tính: ${registrationInfo.gender}`); return true; } console.log('❌ Không thể chọn giới tính'); return false; } // Hàm điền thông tin tên người dùng và mật khẩu async function fillUsernameAndPassword() { // Tạo tên người dùng Gmail const username = generateUsername(registrationInfo.firstName, registrationInfo.lastName); registrationInfo.username = username; console.log(`📧 Tên người dùng: ${username}`); // Tìm và điền vào ô tên người dùng const usernameInput = document.querySelector('input[name="Username"], input[aria-label="Username"]'); if (!usernameInput) { console.log('❌ Không tìm thấy ô input tên người dùng'); return false; } let maxAttempts = 5; // Số lần thử tối đa let attempt = 0; while (attempt < maxAttempts) { attempt++; // Tạo và điền username mới const currentUsername = attempt === 1 ? username : generateUsername(registrationInfo.firstName, registrationInfo.lastName); registrationInfo.username = currentUsername; console.log(`📧 Thử tên người dùng (lần ${attempt}): ${currentUsername}`); await typeLikeHuman(usernameInput, currentUsername); await delay(500, 1000); // Nhấn Next sau khi điền tên người dùng const nextClicked = await findAndClickNextButton(); if (!nextClicked) { console.log('❌ Không thể tiếp tục sau khi điền tên người dùng'); return false; } // Đợi trang tải await waitForPageLoad(CONFIG.pageLoadTimeout); // Kiểm tra thông báo lỗi ký tự không hợp lệ const invalidCharsError = document.querySelector('.bfzBdd .Ekjuhf.Jj6Lae'); if (!invalidCharsError) { // Không tìm thấy lỗi ký tự không hợp lệ, kiểm tra các lỗi khác const errorMessage = await checkForErrors(); if (!errorMessage) { console.log('✅ Tên người dùng hợp lệ'); await delay(800, 1500); break; } console.log(`❌ Lỗi sau khi điền tên người dùng: ${errorMessage}`); return false; } console.log('⚠️ Tên người dùng chứa ký tự không hợp lệ, thử lại...'); await delay(800, 1500); // Xóa nội dung ô input để thử lại usernameInput.value = ''; usernameInput.dispatchEvent(new Event('input', { bubbles: true })); await delay(300, 600); } if (attempt >= maxAttempts) { console.log(`❌ Đã thử ${maxAttempts} lần nhưng không tìm được tên người dùng hợp lệ`); return false; } // Tạo mật khẩu mạnh const password = generateStrongPassword(); registrationInfo.password = password; console.log(`🔑 Mật khẩu: ${password}`); // Tìm và điền vào các ô mật khẩu const passwordInputs = document.querySelectorAll('input[type="password"]'); if (passwordInputs.length >= 2) { // Điền mật khẩu await typeLikeHuman(passwordInputs[0], password); await delay(500, 1000); // Điền xác nhận mật khẩu await typeLikeHuman(passwordInputs[1], password); await delay(400, 800); // Nhấn Next sau khi điền mật khẩu const nextClicked = await findAndClickNextButton(); if (!nextClicked) { console.log('❌ Không thể tiếp tục sau khi điền mật khẩu'); return false; } // Đợi trang tải và kiểm tra lỗi await waitForPageLoad(CONFIG.pageLoadTimeout); const errorMessage = await checkForErrors(); if (errorMessage) { console.log(`❌ Lỗi sau khi điền mật khẩu: ${errorMessage}`); return false; } await delay(800, 1500); } else { console.log('❌ Không tìm thấy đủ ô input mật khẩu'); return false; } return true; } // Hàm kiểm tra xem trang có đang hiển thị lỗi không async function checkForErrors() { // Các selector phổ biến cho thông báo lỗi const errorSelectors = [ '.o6cuMc', // Selector lỗi phổ biến của Google '.OyEIQ', // Selector lỗi khác '[role="alert"]', '.error-message', '.alert-error' ]; for (const selector of errorSelectors) { const errorElements = document.querySelectorAll(selector); for (const element of errorElements) { if (element.offsetParent !== null) { // Kiểm tra xem phần tử có hiển thị không const errorText = element.textContent.trim(); if (errorText) { console.log(`⚠️ Phát hiện lỗi: ${errorText}`); return errorText; } } } } return null; } // Hàm chờ trang tải xong async function waitForPageLoad(timeout = 10000) { console.log('⏳ Đang chờ trang tải...'); const startTime = Date.now(); while (Date.now() - startTime < timeout) { // Kiểm tra xem có spinner loading không const spinners = document.querySelectorAll('.VfPpkd-JGcpL-P1ekSe, .RxsGPe'); let isLoading = false; for (const spinner of spinners) { if (spinner.offsetParent !== null) { isLoading = true; break; } } if (!isLoading) { // Đợi thêm một chút để đảm bảo trang đã tải xong await delay(300, 500); console.log('✅ Trang đã tải xong'); return true; } await delay(200, 300); } console.log('⚠️ Hết thời gian chờ trang tải'); return false; } // Hàm lưu thông tin đăng ký vào file hoặc localStorage function saveRegistrationInfo() { try { // Tạo chuỗi thông tin đăng ký const info = { ...registrationInfo, timestamp: new Date().toISOString(), status: 'completed' }; // Lưu vào localStorage const savedAccounts = JSON.parse(localStorage.getItem('gmailAccounts') || '[]'); savedAccounts.push(info); localStorage.setItem('gmailAccounts', JSON.stringify(savedAccounts)); // In thông tin ra console để copy console.log('📋 THÔNG TIN TÀI KHOẢN ĐÃ ĐĂNG KÝ:'); console.log(JSON.stringify(info, null, 2)); return true; } catch (error) { console.error('❌ Lỗi khi lưu thông tin đăng ký:', error); return false; } } // Hàm xử lý bước xác minh số điện thoại (nếu có) async function handlePhoneVerification() { // Kiểm tra xem có yêu cầu xác minh số điện thoại không const phoneInputs = document.querySelectorAll('input[type="tel"]'); if (phoneInputs.length > 0) { console.log('⚠️ Phát hiện yêu cầu xác minh số điện thoại'); console.log('ℹ️ Bạn cần nhập số điện thoại thủ công để tiếp tục'); // Đợi người dùng nhập số điện thoại thủ công return new Promise(resolve => { const checkInterval = setInterval(() => { // Kiểm tra xem đã chuyển sang màn hình tiếp theo chưa if (!document.querySelector('input[type="tel"]')) { clearInterval(checkInterval); resolve(true); } }, 1000); // Timeout sau 5 phút setTimeout(() => { clearInterval(checkInterval); resolve(false); }, 5 * 60 * 1000); }); } return true; } // Quy trình đăng ký chính async function autoRegisterGmail() { try { console.log('🚀 Bắt đầu quy trình đăng ký Gmail...'); // Bước 1: Điền họ và tên const ho = random(hoViet); const ten = random(tenViet); // Lưu thông tin vào đối tượng registrationInfo registrationInfo.lastName = ho; registrationInfo.firstName = ten; console.log(`👤 Tên người dùng: ${ho} ${ten}`); const lastNameInput = document.querySelector('#lastName'); const firstNameInput = document.querySelector('#firstName'); if (!lastNameInput || !firstNameInput) { console.log("❌ Không tìm thấy ô input họ tên."); return; } // Điền họ và tên với độ trễ tự nhiên await typeLikeHuman(lastNameInput, ho); await delay(400, 900); await typeLikeHuman(firstNameInput, ten); await delay(500, 1200); // Nhấn Next để chuyển sang form tiếp theo const nextClicked = await findAndClickNextButton(); if (!nextClicked) { console.log('❌ Không thể tiếp tục vì không tìm thấy nút Next/Tiếp theo'); return; } // Kiểm tra lỗi await waitForPageLoad(CONFIG.pageLoadTimeout); const errorMessage = await checkForErrors(); if (errorMessage) { console.log(`❌ Quá trình đăng ký bị dừng do lỗi: ${errorMessage}`); return; } // Bước 2: Điền ngày sinh và giới tính await delay(1000, 2000); // Đợi form mới load await fillBirthdayAndGender(); await delay(800, 1500); // Nhấn Next để tiếp tục const nextClicked2 = await findAndClickNextButton(); if (!nextClicked2) { console.log('❌ Không thể tiếp tục vì không tìm thấy nút Next/Tiếp theo'); return; } // Kiểm tra lỗi sau khi nhấn Next lần 2 await waitForPageLoad(CONFIG.pageLoadTimeout); const errorMessage2 = await checkForErrors(); if (errorMessage2) { console.log(`❌ Quá trình đăng ký bị dừng do lỗi: ${errorMessage2}`); return; } // Bước 3: Chọn tùy chọn "Tạo địa chỉ Gmail của riêng bạn" nếu có await delay(1000, 2000); const customGmailOption = document.querySelector('.sfqPrd input[type="radio"][value="custom"]'); if (customGmailOption) { console.log('🔄 Chọn tùy chọn tạo địa chỉ Gmail tùy chỉnh...'); await clickLikeHuman(customGmailOption); await delay(500, 1000); } // Điền tên người dùng và mật khẩu const usernamePasswordFilled = await fillUsernameAndPassword(); if (!usernamePasswordFilled) { console.log('❌ Không thể hoàn thành quá trình điền thông tin đăng nhập'); return; } // Bước 4: Xử lý xác minh số điện thoại (nếu có) await delay(1000, 2000); const phoneVerified = await handlePhoneVerification(); if (!phoneVerified) { console.log('⚠️ Không thể hoàn thành xác minh số điện thoại'); // Vẫn tiếp tục vì có thể đã đăng ký thành công } // Lưu thông tin đăng ký saveRegistrationInfo(); console.log('✅ Hoàn thành quy trình đăng ký Gmail!'); console.log(`📧 Tài khoản: ${registrationInfo.username}@gmail.com`); console.log(`🔑 Mật khẩu: ${registrationInfo.password}`); } catch (error) { console.error('❌ Lỗi trong quá trình đăng ký:', error); } } // Khởi chạy quy trình autoRegisterGmail(); })();