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