Main Website
Web Scraping
Web Scraping
Updated on
March 28, 2024

Input in Puppeteer: How to Enter, Retrieve or Clear Values?

Puppeteer, the Node.js library, stands as a powerful tool for automating browser actions. One fundamental aspect for web interaction involves handling input fields - entering, retrieving, and clearing values. This article covers all necessary methods so you can easily handle and manipulate inputs which you may find in forms and other elements. Let's jump straight to the article:

How to enter input values in Puppeteer?

Puppeteer allows for interaction with various types of input fields commonly found on web pages, such as text fields, number inputs, file inputs, checkboxes, and dropdowns. Each type of input field requires specific methods for effective manipulation.

Interacting with text fields

Text fields, used for general data entry, are often located via CSS selectors or XPath queries. Puppeteer’s .type() method is the primary tool for inputting text into these fields. You can also simulate keyboard events like pressing Enter or Tab using .keyboard.press().

const textField = await page.$('#textInput');
await textField.type('Your text here');
await textField.keyboard.press('Enter');

Interacting with number inputs

Similar to text fields, number inputs can be targeted and filled using the .type() method. Ensure that you are inputting numerical values as shown below:

const numberInput = await page.$('#numberInput');
await numberInput.type('123');

Interacting with checkboxes

Checkboxes are toggled by using the .click() method on the checkbox element.

Similarly, toggling multiple checkboxes involves iterating through them and performing click actions as shown below:

const checkboxes = await page.$$('input[type="checkbox"]'); // Selecting all checkboxes
for (const checkbox of checkboxes) {
  await checkbox.click(); // Toggling each checkbox
}

  • page.$$('input[type="checkbox"]') selects all checkbox elements on the page.
  • The for loop iterates through each checkbox element.
  • await checkbox.click() toggles each checkbox.

Interacting with dropdowns

Dropdowns or select elements are navigated using .select() choosing an option based on its value or visible text.

When managing multiple dropdowns and aiming to set values in each one, a loop can iterate through these elements and apply the desired value to each dropdown individually:

const dropdowns = await page.$$('select'); // Selecting all dropdowns on the page
for (const dropdown of dropdowns) {
  await dropdown.select('optionValue'); // Setting the same value in each dropdown
}

  • page.$$('select') identifies and selects all dropdown elements present on the page.
  • The loop, traversing through each dropdown element, executes the action.
  • await dropdown.select('optionValue') assigns the specified value to each dropdown within the loop.

Interacting with text areas

Text areas, used for larger text inputs, are interacted with similarly to text fields:

const textArea = await page.$('#textAreaInput');
await textArea.type('Your lengthy text here');

Advanced setup cases

Let's cover some advanced setup cases where you need to wait for other elements to load up or to simulate realistic behavior.

1. Waiting for user input with page.waitForSelector()

Puppeteer’s page.waitForSelector() function is an invaluable tool for waiting until a specific element matching the provided selector appears in the DOM. This is particularly useful when waiting for user input or for certain input fields to become available before proceeding with automation.

Here, { visible: true } ensures that Puppeteer waits for the element to become visible, but you can tailor this condition based on your requirements. This function effectively halts the execution of further code until the specified selector is present on the page, ensuring synchronization with user interaction.

2. Simulating realistic user behavior for anti-scraping measures

To bypass anti-scraping mechanisms that detect and block automated activity, Puppeteer allows you to mimic human-like behavior. This involves imitating human interaction patterns such as mouse movements, pauses between actions, and irregular typing speeds.

By introducing randomness in typing speed, adding pauses, or mimicking mouse movements, you can make your Puppeteer-driven actions less predictable and more human-like, effectively bypassing some anti-bot measures.Additionally, you can check out Puppeteer Extra and its plugin selection to improve scraping ability.

How to retrieve input values in Puppeteer?

Retrieving input values from various elements on a web page using Puppeteer is essential for validation, data extraction, or further processing. Puppeteer provides methods to extract values from different types of input fields, including text inputs, dropdowns, checkboxes, and more. Most commonly used methods are page.$eval() or page.evaluate() to extract text from inputs.

Retrieving values from text inputs

Text inputs often store valuable information that needs extraction. Using page.$eval() or page.evaluate(), you can access and retrieve the value of text inputs.

Retrieving values from number inputs

Similarly, for number inputs, you can use the same approach to access and retrieve their values

Retrieving values from checkboxes

Checkboxes provide their state (checked or unchecked) through the checked property. You can retrieve this property to determine the checkbox’s current state.

Similarly, retrieving values from multiple checkboxes involves iterating through them and getting their checked states:

const checkboxes = await page.$$('input[type="checkbox"]'); // Selecting all checkboxes
for (const checkbox of checkboxes) {
 const isChecked = await checkbox.evaluate(input => input.checked);
 console.log('Checkbox State:', isChecked);
}

  • page.$$('input[type="checkbox"]') selects all checkbox elements on the page.
  • The for loop traverses each checkbox element.
  • await checkbox.evaluate(input => input.checked) retrieves the checked state of each checkbox.

Retrieving values from dropdowns

Dropdowns or select elements store selected values. You can use the select element’s value property to retrieve the chosen option.

Here’s how to deal with multiple dropdowns and retrieve their selected values:

const dropdowns = await page.$$('select'); // Selecting all dropdowns on the page
for (const dropdown of dropdowns) {
 const selectValue = await dropdown.evaluate(select => select.value);
 console.log('Selected Dropdown Value:', selectValue);
}

  • page.$$('select') selects all dropdown elements on the page.
  • The for loop iterates through each dropdown element.
  • await dropdown.evaluate(select => select.value) retrieves the value of each dropdown.

Retrieving values from text areas

Text areas, used for larger text inputs, can be retrieved similarly to text fields as shown below.

How to clear input values in Puppeteer?

Clearing input values is essential when testing or automating forms or input fields. Puppeteer provides methods to efficiently clear previously entered values from different types of input elements like text fields, text areas, and more.Clearing text input valuesTo clear text input values using Puppeteer, you can utilize the .type() method along with the String.FromCharCode function to simulate pressing the backspace key the necessary number of times.

Clearing number input values

To clear a number input’s value, you can set its value attribute to an empty string.

Clearing checkbox state

To uncheck a checkbox using Puppeteer, you can directly simulate a click on the checkbox element.

  • page.$('#checkbox') selects the checkbox element using its selector.
  • const isChecked retrieves the current state of the checkbox and if (isChecked) checks if the checkbox is already checked.
  • If the checkbox is checked, await checkbox.click() simulates a click action on the checkbox, toggling its state from checked to unchecked.

  • page.$$() selects all checkbox elements on the page.

The loop iterates through each checkbox element and if the checkbox is checked, await checkbox.click() simulates a click to uncheck it.When dealing with multiple checkboxes that need to be cleared, you can loop through them and uncheck each one individually.

Clearing dropdown selection

Clearing a dropdown selection involves resetting it to its default or empty state.

  • page.$('#dropdown') selects the dropdown by its selector.
  • await dropdown.select('') uses select() to choose an empty option (if available) within the dropdown, effectively clearing the selection.

If the dropdown does not have an empty default option, you might need to select a specific default option by value or index to clear the selection.When dealing with multiple dropdowns that need their selection cleared, you can iterate through each dropdown element and reset their values.

  • page.$$('select') selects all dropdown elements on the page.
  • The for loop iterates through each dropdown element.
  • await dropdown.select('') selects an empty or default option for each dropdown, effectively clearing their selections.

Clearing text area values

Clearing values from text areas involves a similar approach to text inputs as shown below:

  • page.$('#textAreaInput') selects the text area element.
  • await textArea.click({ clickCount: 3 }) simulates a triple click to select all text.
  • await textArea.type(String.fromCharCode(8)) simulates pressing the backspace key, deleting the selected text.

Conclusion

Mastering input handling in Puppeteer is fundamental for efficient browser automation or scraping form data. In this article, we covered diverse aspects, from entering, retrieving, to clearing input values across various element types, including text inputs, dropdowns, and checkboxes.Understanding these methods enables developers to craft robust automation scripts, troubleshoot common issues effectively, and navigate dynamic web scenarios with precision.By leveraging Puppeteer’s functionalities to interact with inputs and employing best practices for error handling, you can streamline your automation processes and ensure reliable browser interactions.

Related Articles

Fill & Submit Form in Puppeteer: Guide With Examples

Click in Puppeteer: Guide to Master Puppeteer's Clicking Methods

iFrame in Puppeteer: Guide For Developers