web-dev-qa-db-fra.com

Appuyez sur le bouton Marionnettiste

Selon https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagepresskey-options vous pouvez simuler la pression d'un bouton du clavier avec le marionnettiste.

Voici ce que je fais:

// First, click the search button
await page.click('#outer-container > nav > span.right > span.search-notification-wrapper > span > form > input[type="text"]');
// Focus on the input field
await page.focus('#outer-container > nav > span.right > span.search-notification-wrapper > span > form > input[type="text"]');
// Enter some text into the input field
await page.type("Bla Bla");
// Press Enter to search -> this doesn't work!
await page.press("Enter");

L'appui sur le bouton ne produit rien. Il est fondamentalement ignoré.

7
elena

Je l'ai enfin compris. J'ai trouvé à l'intérieur de ce même formulaire un élément d'ancrage dont le type était soumis. J'ai ensuite cliqué dessus et le formulaire a été envoyé.

Voici le code que j'ai utilisé:

const form = await page.$('a#topbar-search');
await form.evaluate( form => form.click() );

Vous pouvez également utiliser la méthode $ eval au lieu d'évaluer:

await page.$eval( 'a#topbar-search', form => form.click() );
12
elena

Une autre option pourrait peut-être être:

await page.keyboard.press('Enter');

Tirer parti de son API de clavier virtuel. Plus d'infos info ici

3
Roger G
await page.$eval('input[name=btnK]', el => el.click());

cela va cliquer sur le bouton soumettre dans google. Quant à votre page, découvrez les éléments ou les boutons id puis utilisez-les.

Vous pouvez créer votre propre élément en utilisant xpath.

const browser = await puppeteer.launch();
const page = await browser.newPage();
const txtObject = await page.$x('.//input[type="text"]');
await txtObject[0].type('bla bla bla');

Dans ce code ci-dessus, nous utilisons "$ x" pour récupérer tous les éléments dans un tableau, c'est pourquoi nous utilisons dans "0" comme index dans la ligne de code suivante. Si vous avez plusieurs objets, vous pouvez utiliser une condition "IF" et une boucle pour rechercher l'espace correct et utiliser l'objet correct. Sinon, si vous avez quelques attributs, vous pouvez également utiliser quelque chose comme ça pour avoir un moyen propre et facile d'identifier votre objet

await page.click('input[type="submit"]'); // With type
await page.click('input[class="ng-newstyle"]'); //With class attribute

Et vous pouvez réduire la complexité de la maintenance dans un avenir proche.

1