0
votes

Marionnettiste: délai d'attente après un clic sur le bouton

J'essaie de soumettre un formulaire de connexion, mais tout ce que j'obtiens est un délai d'attente après 30 secondes.

Mon code est assez simple et je ne trouve rien de mal:

const puppeteer = require('puppeteer');

const creds = {
    user: "1234",
    password: "1234"
};

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setViewport({width: 1280, height: 800});
  await page.goto('https://shop2.idena.de/NewShop/');
  await page.type('input[name="FORM_LOGIN"]', creds.user);
  await page.type('input[name="FORM_PASSWD"]', creds.password);

  await Promise.all([
    page.click('button[name="FORM_TYPE"]'),
    page.waitForNavigation()
  ]);

  await page.screenshot({path: 'example.png', fullPage: true});
  await browser.close();
})();

Des idées sur ce qui ne va pas ici?


0 commentaires

3 Réponses :


0
votes

Changez un peu l'ordre des promesses, cela pourrait être possible, la navigation se fait super vite et le waitForNavigation n'attend plus rien. Ou peut-être que votre site Web se charge très lentement après avoir cliqué sur le bouton de connexion.

await Promise.all([
    page.waitForNavigation({timeout: 60000}),
    page.click('button[name="FORM_TYPE"]'),
]);


1 commentaires

Malheureusement ça ne marche pas non plus, je ne comprends pas vraiment pourquoi. Peut également être testé avec de mauvaises données de connexion.



0
votes

EDIT : Je mets à jour ma réponse car plus d'informations ont été fournies dans la question d'origine.

Le problème est qu'il y a une boîte de dialogue que vous devez confirmer / ignorer:

entrez la description de l'image ici

Peut-être que vous ne l'avez pas vu parce que le script était trop rapide. Je recommande de déboguer les scripts de marionnettiste avec headless défini sur false et slowMo sur un nombre supérieur à 0:

const puppeteer = require('puppeteer');

const creds = {
    user: "1234",
    password: "1234"
};

(async () => {  

    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.setViewport({width: 1280, height: 800});
    await page.goto('https://shop2.idena.de/NewShop/');
    await page.type('input[name="FORM_LOGIN"]', creds.user);
    await page.type('input[name="FORM_PASSWD"]', creds.password);

    page.on('dialog', async (dialog) => {    
        await dialog.accept();
    });

    await Promise.all([
        page.click('button[name="FORM_TYPE"]'),
        page.waitForNavigation()
    ]);

    await page.screenshot({path: 'example.png', fullPage: true});
    await browser.close();
})();

Ensuite, vous devez vous débarrasser de la boîte de dialogue:

page.on('dialog', async (dialog) => {    
    await dialog.accept();
});

L'ensemble du script qui passe maintenant:

const browser = await puppeteer.launch({ headless: false, slowMo: 200 });


2 commentaires

Malheureusement, cela ne fonctionne pas non plus. J'ai étendu le script ci-dessus, il est maintenant complet à 100% pour reproduire le problème.


@DOB: J'ai mis à jour ma réponse en fonction de votre question mise à jour avec le lien réel vers le site. Je pense que cela devrait maintenant fonctionner comme prévu, veuillez également le vérifier.



0
votes

Si j'utilise votre exemple avec l'option headful, j'obtiens cette boîte de dialogue qui empêche le chargement de la page:

image

Donc, cet ajout peut aider (je ne sais pas si une boîte de dialogue apparaît avec les informations d'identification correctes):

const puppeteer = require('puppeteer');

const creds = {
    user: "1234",
    password: "1234"
};

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setViewport({width: 1280, height: 800});
  await page.goto('https://shop2.idena.de/NewShop/');
  await page.type('input[name="FORM_LOGIN"]', creds.user);
  await page.type('input[name="FORM_PASSWD"]', creds.password);

  page.on('dialog', async dialog => {
    console.log(dialog.message());
    await dialog.accept();
  });

  await Promise.all([
    page.click('button[name="FORM_TYPE"]'),
    page.waitForNavigation()
  ]);

  await page.screenshot({path: 'example.png', fullPage: true});
  await browser.close();
})();


0 commentaires