const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
const foundEmails = new Set();
function findEmails(node) {
if (node.nodeType === Node.TEXT_NODE) {
const emails = node.textContent.match(emailRegex);
if (emails) {
emails.forEach(email => {
if (!foundEmails.has(email)) {
console.log(email);
foundEmails.add(email);
}
});
}
} else if (node.nodeType === Node.ELEMENT_NODE) {
node.childNodes.forEach(findEmails);
}
}
findEmails(document.body);
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(findEmails);
});
});
observer.observe(document.body, { childList: true, subtree: true });
document.getElementById('download-btn').addEventListener('click', () => {
const emailArray = Array.from(foundEmails);
const blob = new Blob([emailArray.join('\n')], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'emails.txt';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
});