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();
})();
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());
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());