Saltar al contenido

Titiritero – ¿Cómo llenar un formulario que está dentro de un iframe?

Solución:

Lo descubrí yo mismo. Aquí está el código.

console.log('waiting for iframe with form to be ready.');
await page.waitForSelector('iframe');
console.log('iframe is ready. Loading iframe content');

const elementHandle = await page.$(
    'iframe[src="https://example.com"]',
);
const frame = await elementHandle.contentFrame();

console.log('filling form in iframe');
await frame.type('#Name', 'Bob', { delay: 100 });

En lugar de averiguar cómo ingresar al iFrame y escribir, simplificaría el problema navegando a la URL del IFrame directamente

https://warranty.goodmanmfg.com/registration/NewRegistration/NewRegistration.aspx?Sender=Goodman

Haga que su script vaya directamente a la URL anterior e intente automatizarlo, debería funcionar

Edición-1: uso de marcos

Dado que el enfoque simple no funcionó para usted, lo hacemos con los marcos en sí

A continuación se muestra un script simple que debería ayudarlo a comenzar

const puppeteer = require('puppeteer');
(async () => {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    await page.goto('http://www.goodmanmfg.com/product-registration', { timeout: 80000 });
    var frames = await page.frames();
    var myframe = frames.find(
        f =>
            f.url().indexOf("NewRegistration") > -1);
    const serialNumber = await myframe.$("#MainContent_SerNumText");
    await serialNumber.type("12345");

    await page.screenshot({ path: 'example.png' });

    await browser.close();
})();

La salida es

Tipo de serie

Si no puede seleccionar / encontrar iFrame, lea esto:

Tuve un problema al encontrar elementos de rayas. La razón de esto es la siguiente:

No puede acceder a una con un origen diferente usando JavaScript, sería una gran falla de seguridad si pudiera hacerlo. Para la política del mismo origen, los navegadores bloquean los scripts que intentan acceder a un marco con un origen diferente. Vea una respuesta más detallada aquí

Por lo tanto, cuando intenté usar los métodos de titiritero:Page.frames() y Page.mainFrame(). ElementHandle.contentFrame() No me devolví ningún iframe. El problema es que estaba sucediendo en silencio y no podía entender por qué no podía encontrar nada.

Agregar estos argumentos para lanzar opciones resolvió el problema:

'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process'

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *