Je dois remplir un formulaire qui se trouve dans un iframe, ici le exemple de page . Je ne peux pas y accéder en utilisant simplement page.focus()
et page.type()
. J'ai essayé d'obtenir le formulaire iframe en utilisant const formFrame = page.mainFrame().childFrames()[0]
, qui fonctionne mais je ne peux pas vraiment interagir avec le formulaire iframe.
Je l'ai compris moi-même. Voici le code.
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 });
Au lieu de comprendre comment entrer dans l'iFrame et le type, je simplifierais le problème en accédant directement à l'URL IFrame
https://warranty.goodmanmfg.com/registration/NewRegistration/NewRegistration.aspx?Sender=Goodman
Rendez votre script directement à l'URL ci-dessus et essayez d'automatiser, cela devrait fonctionner
Édition-1: Utilisation de cadres
Puisque l'approche simple n'a pas fonctionné pour vous, nous le faisons avec les cadres eux-mêmes
Voici un script simple qui devrait vous aider à démarrer
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") > 0);
const serialNumber = await myframe.$("#MainContent_SerNumText");
await serialNumber.type("12345");
await page.screenshot({path: 'example.png'});
await browser.close();
})();
La sortie est