Main Website
Scraping
Scraping
Updated on
February 9, 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().

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:

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:

  • 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:

  • 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:

Advanced setup cases

Let's cover some advancesd 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:

  • 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:

  • 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 values

To 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

Using Puppeteer on AWS Lambda for Scraping

Scroll in Puppeteer: Scroll to Bottom, Top, or Into View

5 Puppeteer Alternatives For Scraping & Application Testing