Estoy creando una extensión de Chrome que debería poder extraer cualquier dirección de correo electrónico que aparezca en la página de fondo.
Descubrí que usar RegEx para escanear todo el documento es una operación muy costosa y el sitio web falla.
¿Por qué estoy escaneando todo el documento?
Recuerde, la extensión está funcionando en sitios web que no creé, por lo que no sé dónde colocó el correo electrónico el desarrollador. Podría estar en una etiqueta, o en un
etiqueta, o en una... las opciones son infinitas. Por lo tanto, no puedo hacer un simple document.getElementsByTagName() o cualquier consulta similar.
Una forma en que pensé en reducir el costo de la operación fue identificar en qué etiqueta HTML se encuentran los correos electrónicos. Pensé en usar un Xpath y seleccionar todos los nodos con texto que contiene una '@', ya que '@' es un carácter que todos los correos electrónicos tienen... entonces, solo tengo que comparar el contenido de texto de esos nodos con mi correo electrónico RegEx para ver si hay una coincidencia.
Aún así, cuando uso un
Xpath = //texto()[contiene(.,'@')]
o cualquier variante de esa expresión, no solo obtengo los nodos con texto visible que contienen una '@', sino también los nodos que tienen información oculta que contiene @.
En pocas palabras, la operación sigue siendo muy costosa y está colapsando las páginas de fondo.
Utilicé este procedimiento para obtener números de teléfono y funciona bien. Me imagino que es porque escanear valores numéricos no es tan costoso ya que el 99% del contenido del sitio web son letras.
¿Estoy pensando correctamente acerca de cómo abordar esto? ¿Alguien tiene una mejor alternativa?