Estoy tratando de escribir un script para extraer la identificación y el nombre del correo electrónico de este sitio web. Intenté el siguiente fragmento pero no funciona.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>foo</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href=""> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> </head> <body> <div> <strong style="color: darkgreen;">Can read this tag</strong> <object id="external_page" type="text/html" data="https://aleenarais.com/buddy/" width="800px" height="600px" style="overflow:auto;border:5px ridge blue"> <!-- I want to read tag values from this object --> </object> </div> <script> window.addEventListener('load', function () { const item = []; $('strong[style="color: darkgreen;"]').each(function () { item.push($(this).text()) }) console.log(item) }) </script> </body> </html>¿Hay alguna manera mejor de hacer esto? ¿O es posible convertir toda la página en una cadena y extraer el correo electrónico usando RegEx?
El correo electrónico y el nombre de la página web se representan en un iframe. La fuente de iframe es una fuente externa. Para que pueda extraer la información, necesita usar un navegador sin cabeza para hacerlo.
Sugeriría usar Node.JS & Puppeteer ( https://www.npmjs.com/package/puppeteer )
const puppeteer = require("puppeteer"); (async() => { const url = "https://aleenarais.com/buddy/"; const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(url, { waitUntil: "networkidle0" }); var frames = await page.frames(); var myframe = frames.find( (f) => f.url().indexOf("https://feedium.app/fetchh.php") > -1 ); const textFeed = await myframe.$$eval("strong", (sElements) => sElements.map((el) => el.textContent) ); console.log(textFeed.splice(1)); //Array contains both name and email await browser.close(); })();Titiritero carga la página de forma similar a como un usuario carga la página. Espera hasta que se realizan todas las llamadas de red (ver red inactiva0) y luego intenta encontrar el iframe que tiene la url (fetchh.php). Si observa, el nombre y el correo electrónico están presentes en las etiquetas fuertes y son las únicas etiquetas fuertes disponibles. Por lo tanto, estamos extrayendo las etiquetas fuertes, eliminando el conteo y nos quedamos solo con el nombre y el correo electrónico.
Salida: [ 'J J', 'j *j@gmail.com' ] //Acabo de enmascarar los valores pero el programa da los reales
Pasos para ejecutar el script:
Deberías ver la salida.
Prueba esto:
window.addEventListener('load', function () { let item = []; $('strong[style*="color: darkgreen;"]').each(function (index, item) { item.push($(this).text()) }) console.log(item) }