webentwicklung-frage-antwort-db.com.de

Puppenspieler: Wie reiche ich ein Formular ein?

Wie können Sie mit Puppenspieler programmgesteuert ein Formular senden? Bisher konnte ich dies mit page.click('.input[type="submit"]') tun, wenn das Formular tatsächlich eine Eingabe zum Senden enthält. Bei Formularen, die keine Übermittlungseingabe enthalten, scheint die Konzentration auf das Formulartexteingabeelement und die Verwendung von page.press('Enter') nicht zu einer Übermittlung des Formulars zu führen:

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

Versuche dies

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

Für v0.11.0 und spätere Versionen:

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

Wenn Sie versuchen, ein Anmeldeformular auszufüllen und abzusenden, können Sie Folgendes verwenden:

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