SlideShare a Scribd company logo
Hacking the Browser
With Puppeteer-Sharp
Darío Kondratiuk
.NET Senior Developer - MultiTracks.com
Author of Puppeteer-Sharp
@kblok - @hardkoded
www.hardkoded.com
Hacking the Browser
With Puppeteer-Sharp
Darío Kondratiuk
.NET Senior Developer @ MultiTracks.com
Author of Puppeteer-Sharp
@hardkoded - @kblok
www.hardkoded.com
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Headless Browsers
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Headless Browsers
● July 4, 2017 => Google Chrome 59
○ chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Headless Browsers
● July 4, 2017 => Google Chrome 59
○ chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/
● August 8, 2017 => Firefox 55
● August 16, 2017 => Puppeteer v0.9
● January 12, 2018 => Puppeteer v1.0
● March 1, 2018 => Puppeteer Sharp v0.1
● April 27, 2018 => Edge DevTools Protocol v0.1
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
WebDriver vs Headless Browsers
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
WebDriver
WebDriver is a remote control interface that enables
introspection and control of user agents. It provides a
platform- and language-neutral wire protocol as a way for out-
of-process programs to remotely instruct the behavior of web
browsers.
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Use Cases
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Screenshots
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
[HttpGet("{owner}/{repo}")]
public async Task<FileContentResult> Get(string owner, string repo)
{
var contributorsPage = $"https://github.com/{owner}/{repo}/graphs/contributors";
using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = false
}))
using (var page = await browser.NewPageAsync())
{
await page.GoToAsync(contributorsPage);
await page.WaitForSelectorAsync(".contrib-person");
var element = await page.QuerySelectorAsync("#contributors");
var image = await element.ScreenshotDataAsync();
return File(image, "image/png");
}
}
PDFs
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
[HttpGet("{owner}/{post}")]
public async Task<FileContentResult> Get(string author, string post)
{
var contributorsPage = $"https://medium.com/{author}/{post}";
using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true
}))
using (var page = await browser.NewPageAsync())
{
await page.GoToAsync(contributorsPage);
await page.WaitForSelectorAsync("HEADER");
await page.EvaluateExpressionAsync("document.querySelector('HEADER').remove();");
var pdf = await page.PdfDataAsync();
return File(pdf, "application/pdf");
}
}
Web Scraping
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
var url = "https://www.despegar.com.ar/shop/flights/results/roundtrip/BUE/MDZ/2018-12-01/2018-12-08/1";
using (var browser = await Puppeteer.LaunchAsync(options))
using (var page = await browser.NewPageAsync())
{
await page.GoToAsync(url, WaitUntilNavigation.Networkidle0);
await page.WaitForSelectorAsync("buy-button");
var bestPrice = await page.EvaluateFunctionAsync<string>(@"() => {
var elements = document.querySelectorAll('.main-content .price-amount');
return elements.length ? elements[0].innerText : '0';
}");
Console.WriteLine($"Best price for Mendoza {bestPrice}");
await Task.Delay(60000);
}
UI Testing
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
[Fact]
public async Task ShouldHonorThePrice()
{
//Previous Code
var clickElement = await page.EvaluateExpressionHandleAsync(@"
document.querySelectorAll('.main-content buy-button:first-child A')[0]")
as ElementHandle;
await clickElement.ClickAsync();
await page.WaitForSelectorAsync(".price-container .amount");
var checkoutPrice = await page.EvaluateExpressionAsync<string>(@"
document.querySelectorAll('.price-container .amount')[0].innerText
");
Assert.Equal(bestPrice, checkoutPrice);
}
Task Automation
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
DEMO
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
More examples
https://github.com/GoogleChromeLabs/puppeteer-examples
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Even more examples
https://github.com/checkly/puppeteer-examples
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Don’ts
● DDoS Attacks
● Unethical Web Scraping
● Fake page loads
● Credential Stuffing
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Puppeteer the world!
● Puppeteer Recorder
● Rendertron
● Checkly
● Contributors!
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Give Back
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
The power of a Star
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
Thank you!
https://developer.mozilla.org/en-US/docs/Web/WebDriver October 4th, 5th & 6th 2018.NET Conf AR v2018
@hardkoded - @kblok
www.hardkoded.com

More Related Content

What's hot (20)

PDF
Page object pattern
Petro Konopelko
 
PDF
Introduction to Spring Boot
Trey Howard
 
PDF
Express node js
Yashprit Singh
 
PPTX
Browser Automation with Playwright – for integration, RPA, UI testing and mor...
Lucas Jellema
 
PDF
Puppeteer can automate that! - Frontmania
Önder Ceylan
 
PPTX
Selenium-4
Manoj Kumar Kumar
 
PPTX
Cypress Automation
Susantha Pathirana
 
PPTX
REST vs gRPC: Battle of API's
Luram Archanjo
 
PPTX
React introduction
Võ Duy Tuấn
 
PDF
Detecting headless browsers
Sergey Shekyan
 
PPTX
test_automation_POC
Rafael Battesti
 
PPTX
Automation test framework with cucumber – BDD
123abcda
 
PPTX
Json Web Token - JWT
Prashant Walke
 
PPTX
Rest API Security
Stormpath
 
PDF
Spring Framework - Spring Security
Dzmitry Naskou
 
PDF
[24]안드로이드 웹뷰의 모든것
NAVER Engineering
 
PDF
Hunting for security bugs in AEM webapps
Mikhail Egorov
 
PPTX
Rest presentation
srividhyau
 
PDF
Elastic Stack & Data pipeline (1장)
Jongho Woo
 
PPTX
Automation - web testing with selenium
Tzirla Rozental
 
Page object pattern
Petro Konopelko
 
Introduction to Spring Boot
Trey Howard
 
Express node js
Yashprit Singh
 
Browser Automation with Playwright – for integration, RPA, UI testing and mor...
Lucas Jellema
 
Puppeteer can automate that! - Frontmania
Önder Ceylan
 
Selenium-4
Manoj Kumar Kumar
 
Cypress Automation
Susantha Pathirana
 
REST vs gRPC: Battle of API's
Luram Archanjo
 
React introduction
Võ Duy Tuấn
 
Detecting headless browsers
Sergey Shekyan
 
test_automation_POC
Rafael Battesti
 
Automation test framework with cucumber – BDD
123abcda
 
Json Web Token - JWT
Prashant Walke
 
Rest API Security
Stormpath
 
Spring Framework - Spring Security
Dzmitry Naskou
 
[24]안드로이드 웹뷰의 모든것
NAVER Engineering
 
Hunting for security bugs in AEM webapps
Mikhail Egorov
 
Rest presentation
srividhyau
 
Elastic Stack & Data pipeline (1장)
Jongho Woo
 
Automation - web testing with selenium
Tzirla Rozental
 

Similar to Hacking the browser with puppeteer sharp .NET conf AR 2018 (20)

PDF
vodQA Pune (2019) - Browser automation using dev tools
vodQA
 
PDF
Web driver selenium simplified
Vikas Singh
 
PDF
Puppeteer can automate that! - AmsterdamJS
Önder Ceylan
 
PPTX
Web driver training
Dipesh Bhatewara
 
PDF
Your Framework for Success: introduction to JavaScript Testing at Scale
Sauce Labs
 
PPTX
Puppeteer (JavaScript library for UI testing)
techticfaizan
 
PPTX
Module 01 - WebDriver Basics
NPN Training
 
PPTX
RPA on Azure with .Net
Marco Parenzan
 
PDF
Ultimate Guide to Cross Browser Testing
morrismoses149
 
PPTX
Selenium topic 3 -Web Driver Basics
ITProfessional Academy
 
PPTX
A Deep Dive into the W3C WebDriver Specification
Peter Thomas
 
PDF
Puppeteer can automate that! - HolyJS Piter 2020
Önder Ceylan
 
PPTX
Headless browser: puppeteer and git client : GitKraken
SheikhMoonwaraAnjumM
 
PDF
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Alan Richardson
 
PPTX
How to start ui automation in 15 mins with Puppeteer
Oleksandr Pelykh
 
PPTX
Web driver interface
Ducat
 
PPTX
How To Automate Cross Browser Testing
Daniel Herken
 
PPTX
Web Compatibility and Performance Testing in a Multi-Browser World
Compuware APM
 
PPTX
The Screenplay Pattern: Better Interactions for Better Automation
Applitools
 
PPTX
Selenium WebDriver
Yuriy Bezgachnyuk
 
vodQA Pune (2019) - Browser automation using dev tools
vodQA
 
Web driver selenium simplified
Vikas Singh
 
Puppeteer can automate that! - AmsterdamJS
Önder Ceylan
 
Web driver training
Dipesh Bhatewara
 
Your Framework for Success: introduction to JavaScript Testing at Scale
Sauce Labs
 
Puppeteer (JavaScript library for UI testing)
techticfaizan
 
Module 01 - WebDriver Basics
NPN Training
 
RPA on Azure with .Net
Marco Parenzan
 
Ultimate Guide to Cross Browser Testing
morrismoses149
 
Selenium topic 3 -Web Driver Basics
ITProfessional Academy
 
A Deep Dive into the W3C WebDriver Specification
Peter Thomas
 
Puppeteer can automate that! - HolyJS Piter 2020
Önder Ceylan
 
Headless browser: puppeteer and git client : GitKraken
SheikhMoonwaraAnjumM
 
Hands on Exploration of Page Objects and Abstraction Layers with Selenium Web...
Alan Richardson
 
How to start ui automation in 15 mins with Puppeteer
Oleksandr Pelykh
 
Web driver interface
Ducat
 
How To Automate Cross Browser Testing
Daniel Herken
 
Web Compatibility and Performance Testing in a Multi-Browser World
Compuware APM
 
The Screenplay Pattern: Better Interactions for Better Automation
Applitools
 
Selenium WebDriver
Yuriy Bezgachnyuk
 

More from Darío Kondratiuk (6)

PPTX
Novedades en C# 10, .NET 6 y ASP.NET 6
Darío Kondratiuk
 
PPTX
FreeCodeCampBA: Hoy te convertís en un héroe
Darío Kondratiuk
 
PPTX
Web automation para developers
Darío Kondratiuk
 
PPTX
Async programming: From 0 to task.IsComplete - es
Darío Kondratiuk
 
PPTX
vOpen19 Uruguay - Hoy te convertis en un heroe
Darío Kondratiuk
 
PPTX
Hoy te convertis en un héroe - AOM 2019
Darío Kondratiuk
 
Novedades en C# 10, .NET 6 y ASP.NET 6
Darío Kondratiuk
 
FreeCodeCampBA: Hoy te convertís en un héroe
Darío Kondratiuk
 
Web automation para developers
Darío Kondratiuk
 
Async programming: From 0 to task.IsComplete - es
Darío Kondratiuk
 
vOpen19 Uruguay - Hoy te convertis en un heroe
Darío Kondratiuk
 
Hoy te convertis en un héroe - AOM 2019
Darío Kondratiuk
 

Recently uploaded (20)

PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PPTX
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
PDF
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
PPTX
Function & Procedure: Function Vs Procedure in PL/SQL
Shani Tiwari
 
PPTX
Prompt Like a Pro. Leveraging Salesforce Data to Power AI Workflows.pptx
Dele Amefo
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PDF
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
PDF
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PDF
Is Framer the Future of AI Powered No-Code Development?
Isla Pandora
 
PPTX
Transforming Insights: How Generative AI is Revolutionizing Data Analytics
LetsAI Solutions
 
PDF
Ready Layer One: Intro to the Model Context Protocol
mmckenna1
 
PDF
intro_to_cpp_namespace_robotics_corner.pdf
MohamedSaied877003
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PPTX
Library_Management_System_PPT111111.pptx
nmtnissancrm
 
PPTX
Smart Doctor Appointment Booking option in odoo.pptx
AxisTechnolabs
 
PPTX
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
PDF
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Milwaukee Marketo User Group - Summer Road Trip: Mapping and Personalizing Yo...
bbedford2
 
UITP Summit Meep Pitch may 2025 MaaS Rebooted
campoamor1
 
Function & Procedure: Function Vs Procedure in PL/SQL
Shani Tiwari
 
Prompt Like a Pro. Leveraging Salesforce Data to Power AI Workflows.pptx
Dele Amefo
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
Everything you need to know about pricing & licensing Microsoft 365 Copilot f...
Q-Advise
 
IObit Driver Booster Pro 12.4.0.585 Crack Free Download
henryc1122g
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
Is Framer the Future of AI Powered No-Code Development?
Isla Pandora
 
Transforming Insights: How Generative AI is Revolutionizing Data Analytics
LetsAI Solutions
 
Ready Layer One: Intro to the Model Context Protocol
mmckenna1
 
intro_to_cpp_namespace_robotics_corner.pdf
MohamedSaied877003
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Library_Management_System_PPT111111.pptx
nmtnissancrm
 
Smart Doctor Appointment Booking option in odoo.pptx
AxisTechnolabs
 
Foundations of Marketo Engage - Powering Campaigns with Marketo Personalization
bbedford2
 
How to Hire AI Developers_ Step-by-Step Guide in 2025.pdf
DianApps Technologies
 

Hacking the browser with puppeteer sharp .NET conf AR 2018

Editor's Notes

  • #14: Contributors images
  • #18: Contributors images
  • #19: Contributors images
  • #20: Contributors images
  • #21: Contributors images
  • #22: Contributors images
  • #23: Contributors images
  • #24: Contributors images
  • #25: Contributors images
  • #26: Contributors images
  • #27: Contributors images
  • #28: Contributors images
  • #29: Contributors images
  • #30: Contributors images
  • #31: Contributors images
  • #32: Chrome tells you when it runs in automation mode
  • #33: Contributors images
  • #34: Contributors images
  • #35: Contributors images
  • #36: Contributors images