In Puppeteer-Sharp, which is the .NET port of the Node.js library Puppeteer, you can use selectors to find elements on a web page in a similar way as you would in the original Puppeteer library. The primary method to select elements is Page.QuerySelectorAsync(selector)
for a single element, and Page.QuerySelectorAllAsync(selector)
for multiple elements.
Here's how you can use selectors in Puppeteer-Sharp:
Using CSS Selectors
The most common type of selector is the CSS selector.
using PuppeteerSharp;
// ...initialize PuppeteerSharp and navigate to a page...
// To select a single element
var singleElement = await page.QuerySelectorAsync("css_selector_here");
// To select multiple elements
var multipleElements = await page.QuerySelectorAllAsync("css_selector_here");
// Example: Find an element with the id 'submit-button'
var submitButton = await page.QuerySelectorAsync("#submit-button");
// Example: Find all elements with the class 'item'
var items = await page.QuerySelectorAllAsync(".item");
Using XPath Selectors
You can also use XPath selectors to find elements that are not easily accessible with CSS selectors.
// To select a single element using XPath
var singleElement = await page.XPathAsync("xpath_selector_here");
// To select multiple elements using XPath
var multipleElements = await page.XPathAsync("xpath_selector_here");
// Example: Find an element with the text 'Click me'
var clickMeButton = await page.XPathAsync("//*[text()='Click me']");
Working with the selected elements
After selecting the elements, you can perform various actions on them, such as clicking, typing, reading attributes, or extracting text.
// Clicking an element
await submitButton.ClickAsync();
// Typing into an input field
await singleElement.TypeAsync("Hello, Puppeteer-Sharp!");
// Getting the text content of an element
string textContent = await (await items[0].GetPropertyAsync("textContent")).JsonValueAsync<string>();
// Getting an attribute value
string hrefValue = await (await singleElement.GetPropertyAsync("href")).JsonValueAsync<string>();
Example: Full Code
Here's a full example that navigates to a page, finds an element by its CSS selector, and then extracts its text content.
using System;
using System.Threading.Tasks;
using PuppeteerSharp;
class Program
{
public static async Task Main(string[] args)
{
// Download the Chromium revision if it does not already exist
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
// Launch the browser and a new page
var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true // Set to false if you want to see the browser
});
var page = await browser.NewPageAsync();
// Navigate to the desired web page
await page.GoToAsync("http://example.com");
// Use a CSS selector to select an element
var element = await page.QuerySelectorAsync("h1");
// Extract the text content of the element
string textContent = await (await element.GetPropertyAsync("textContent")).JsonValueAsync<string>();
// Output the text content of the element
Console.WriteLine(textContent);
// Close the browser
await browser.CloseAsync();
}
}
Remember that for Puppeteer-Sharp to work, you need to have a .NET runtime environment setup and include Puppeteer-Sharp as a dependency in your project.
Additional Notes
- Make sure to handle possible exceptions, such as
SelectorException
, which may occur if an element is not found. - To run Puppeteer-Sharp, you need to include the Puppeteer-Sharp NuGet package in your project.
- The examples assume you have a project with Puppeteer-Sharp installed and correctly initialized.
- Puppeteer-Sharp requires a version of the Chromium browser to be downloaded and used by the library. The
BrowserFetcher
class can be used to manage this.
This should give you a good start on how to use selectors to find elements with Puppeteer-Sharp in a .NET environment.