Table of Contents

How to map a javascript object to a .NET object

Contributors: Bilal Durrani

Problem

You need to map javascript object to a .NET object.

Solution

Use Page.EvaluateFunctionAsync<T> to evaluate a javascript function in the context of the browser and return a .NET object of type T.


public class Data
{
    public string Title { get; set; }
    public string Url { get; set; }
}

using (var browser = await Puppeteer.LaunchAsync(options))
using (var page = await browser.NewPageAsync())
{
    await page.GoToAsync("https://news.ycombinator.com/");
    Console.WriteLine("Get all urls from page");
    var jsCode = @"() => {
const selectors = Array.from(document.querySelectorAll('a[class=""storylink""]'));
return selectors.map( t=> {return { title: t.innerHTML, url: t.href}});
}";
    var results = await page.EvaluateFunctionAsync<Data[]>(jsCode);
    foreach (var result in results)
    {
        Console.WriteLine(result.ToString());
    }
    Console.WriteLine("Press any key to continue...");
    Console.ReadLine();
}