web-dev-qa-db-fra.com

Marionnettiste: Comment soumettre un formulaire?

En utilisant marionnettiste , comment pouvez-vous soumettre un formulaire par programme? Jusqu'à présent, j'ai pu utiliser page.click('.input[type="submit"]') si le formulaire inclut une entrée de soumission. Mais pour les formulaires qui n'incluent pas de saisie de soumission, se concentrer sur l'élément de saisie de texte de formulaire et utiliser page.press('Enter') ne semble pas réellement entraîner l'envoi du formulaire:

const puppeteer = require('puppeteer');

(async() => {

    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto('https://stackoverflow.com/', {waitUntil: 'load'});
    console.log(page.url());

    // Type our query into the search bar
    await page.focus('.js-search-field');
    await page.type('puppeteer');

    // Submit form
    await page.press('Enter');

    // Wait for search results page to load
    await page.waitForNavigation({waitUntil: 'load'});


    console.log('FOUND!', page.url());

    // Extract the results from the page
    const links = await page.evaluate(() => {
      const anchors = Array.from(document.querySelectorAll('.result-link a'));
      return anchors.map(anchor => anchor.textContent);
    });
    console.log(links.join('\n'));
    browser.close();

})();
19
docta_faustus

Essaye ça

const form = await page.$('form-selector');
await form.evaluate(form => form.submit());

Pour v0.11.0 et les suivants:

await page.$eval('form-selector', form => form.submit());
25
Nam Mai Anh

Si vous essayez de remplir et de soumettre un formulaire de connexion, vous pouvez utiliser les éléments suivants:

await page.goto('https://www.example.com/login');

await page.type('#username', 'username');
await page.type('#password', 'password');

await page.click('#submit');

await page.waitForNavigation();

console.log('New Page URL:', page.url());
23
Grant Miller