Releases: hardkoded/puppeteer-sharp
v.1.5
New Features
New APIs
- 07cdbd8 Target.Opener.
- aa6470f Request.IsNavigationRequest.
- 1de769f Page.IsClosed.
- d2abe29 Change accessibilty on Payload.
- c4b876a Page. ScreenshotBase64Async and ElementHandle.ScreenshotBase64Async.
- 3298bd4 ElementHandle.QuerySelectorAllHandleAsync.
- 25bc019 CDPSession.TargetType.
- 25bc019 Page.WorkerCreated.
- 25bc019 Page.WorkerDestroyed.
- 25bc019 Page.Workers.
Breaking Changes
- 7490355 Disable crash reporting by default.
- f8b5ff5 Added .ConfigureAwait(false) to each await.
- e510b19 Change ScreenshotOptions.Quality type.
- 25bc019 Dropped CDPSession.TargetId.
- 25bc019 Dropped ExecutionContext.FrameId.
- 25bc019 Dropped ExecutionContext.IsDefault.
Changelog
- 709cefd Chromium updated to r564778.
- 7ef326b Update PuppeteerSharp.Tests packages versions.
- 1f0ecbf Launch browser with 'about:blank' by default.
- 9ad9de3 Respect timeout 0 in Page.waitForFunctionAsync.
- cdb4c88 Add a missing test for elementHandle.
- f19813b Pass through "background_page" types.
- c918744 Ensure first page is created when browser is launched.
- 31ad5b0 Improve access to files to use true asynchronous methods.
- 67ac040 Add test that validates that pages open with userDataDir arg.
- 539a4cf Normalize scrollbars in headful tests.
- def5803 Disable OOPIF by default.
- eb0a322 Not pass user options to browser constructor.
- c043062 Verify ignoreHTTPSErrors works with puppeteer.ConnectAsync.
- 521ec40 Update ConsoleType.
v1.4
New APIs
Minor changes
- b1f108b Rolled Chromium to r555668.
- 1ca3e70 Status 204 support.
- 21daa2d Report 'Log' domain entries as 'console' events.
- b187eb1 Verify file url interception works as expected.
- 8e62366 DownloadAsync should return revision info even if the revision was already downloaded.
- 5b66364 Allow user gesture restricted code to be run in Page.EvaluateExpressionAsync.
- 1a86165 Add pixel2/pixel2 xl.
- c39f625 Add explanation to page.waitForNavigation.
- 60c2c0e ElementHandle EvaluateFunctionAsync examples.
v1.3
New Features
New APIs
- 3e985c5 Page.SetBypassCSPAsync
- 64a2b19 Page.WaitForExpressionAsync
- 64a2b19 Frame.WaitForExpressionAsync
- 0f328c5 ElementHandle.BoxModelAsync
- ee41463 Page.Close event
Breaking Changes
- 079273d ConnectOptions.KeepAliveInterval and LaunchOPtions.KeepAliveInterval were marked as obsolete because Chromim doesn't support pings yet (see: https://bugs.chromium.org/p/chromium/issues/detail?id=865002)
- ff30f2a ScreenshotOptions.Type is now an enum
Changelog
- c99a35d Add an option to disable timeout for WaitForFunctionAsync
- cd5f9ed Tracing.StopAsync now returns a string with the trace data.
- 8bfb4d4 ViewPortOptions.DeviceScaleFactor, IsLandscape and HasTouch now has a public setter.
- 1497c79 Page.waitForNavigation handle mixed content correctly.
- 011908d Explicitly throw on content request for redirect response
- 0e581d8 Consume protocol errors when initiating browser.close()
v1.2
New Features
- New RequestChain property
- Chromium updated to r543305
New APIs
- ccf6e01 Request.RedirectChain
- 21ad44f ElementHandle.ContentFrameAsync
- https://github.com/kblok/puppeteer-sharp/commit/5323e8f647f9405e08247f915cc18d5cd7745c58 AddTagOptions.Type. Allowing the user to declare script tags (using Page.AddScriptTagAsync) as modules.
Changes
v1.1
New Features
- New Chromium version r536395
- Service workers support
- Cache Support
- New WaitFor options
- New BrowserFetcher utility
- Dump IO implementation
New APIs
- Page.SetCacheEnabledAsync
- Page.DOMContentLoaded
- Page.WaitForXPathAsync
- ResponseData.FromServiceWorker
- ExecutionContext.Frame
- Frame.EvaluateExpressionHandleAsync
- Frame.EvaluateFunctionHandleAsync
- Frame.WaitForSelectorAsync
- Frame.WaitForXPathAsync
- Frame.WaitForSelectorOrXPathAsync
Breaking Changes
Downloader changes
The Downloader
class was renamed to BrowserFetcher
. BrowserFetcher
has the following API:
- DefaultRevision
- DownloadsFolder
- DownloadHost
- Platform
- DownloadProgressChanged
- CanDownloadAsync(int revision)
- LocalRevisions()
- Remove(int revision)
- RevisionInfo(int revision)
- DownloadAsync(int revision)
- GetExecutablePath(int revision)
- GetExecutablePath(Platform platform, string folderPath)
If you were using Downloader
like this:
await Downloader.CreateDefault().DownloadRevisionAsync(chromiumRevision);
It should be changed to :
await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
Puppeteer.LaunchAsync breaking change
In order to simplify the API, the revision argument was removed from the LaunchAsync
method. So this piece of code:
Puppeteer.LaunchAsync(launcherOptions, Downloader.DefaultRevision);
Should be changed to:
Puppeteer.LaunchAsync(launcherOptions);
If you need to launch Puppeteer using another revision you should handle that using the ExecutablePath
option:
var myRevisionInfo = await new BrowserFetcher().DownloadAsync(myRevision);
var browser = Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
ExecutablePath = myRevisionInfo.ExecutablePath
});
v1
The day has come. Puppeteer Sharp is fully compatible with Puppeteer V1!
New Features
- Request.RespondAsync support.
- CSS and JS Coverage.
- Request Interception.
New APIs
- Request.RespondAsync
- Page.Coverage.StartJSCoverageAsync
- Page.Coverage.StopJSCoverageAsync
- Page.Coverage.StartCSSCoverageAsync
- Page.Coverage.StopCSSCoverageAsync
- Page.ScreenshotDataAsync
- Page.PdfDataAsync
- Page.SetRequestInterceptionAsync
- Page.GoBackAsync
- Page.GoForwardAsync
- Page.QueryObjectsAsync
- ElementHandle.ScreenshotDataAsync
- ElementHandle.PdfDataAsync
- Browser.WebSocketEndpoint
- Browser.Process
Namespace Changes
- PuppeteerSharp.ClickOptions => PuppeteerSharp.Input.ClickOptions
- PuppeteerSharp.Key => PuppeteerSharp.Input.Key
- PuppeteerSharp.Keyboard => PuppeteerSharp.Input.Keyboard
- PuppeteerSharp.KeyDefinition => PuppeteerSharp.Input.KeyDefinition
- PuppeteerSharp.KeyDefinitions => PuppeteerSharp.Input.KeyDefinitions
- PuppeteerSharp.Mouse => PuppeteerSharp.Input.Mouse
- PuppeteerSharp.MouseButton => PuppeteerSharp.Input.MouseButton
- PuppeteerSharp.MoveOptions => PuppeteerSharp.Input.MoveOptions
- PuppeteerSharp.PressOption => PuppeteerSharp.Input.PresspPtions
- PuppeteerSharp.Touchscreen => PuppeteerSharp.Input.TouchScreen
- PuppeteerSharp.Clip => PuppeteerSharp.Media.Clip
- PuppeteerSharp.MarginOptions => PuppeteerSharp.Media.MarginOptions
- PuppeteerSharp.MediaType => PuppeteerSharp.Media.MediaType
- PuppeteerSharp.PaperFormat => PuppeteerSharp.Media.PaperFormat
- PuppeteerSharp.ScreenOrientation => PuppeteerSharp.Media.ScreenOrientation
- PuppeteerSharp.ScreenOrientationType => PuppeteerSharp.Media.ScreenOrientationType
- PuppeteerSharp.DeviceDescriptor => PuppeteerSharp.Mobile.DeviceDescriptor
- PuppeteerSharp.DeviceDescriptors => PuppeteerSharp.Mobile.DeviceDescriptors
- PuppeteerSharp.DeviceDescriptorName => PuppeteerSharp.Mobile.DeviceDescriptorName
v0.8 ElementHandle Support
- 0.8.0: ElementHandle
- Features:
- ElementHandle support
- API Changes
- Page.SetViewport renamed to Page.SetViewportAsync
- JSHandle.AsElement was dropped. Use JSHandle as ElementHandle instead
- JSHandle.JsonValue renamed to JSHandle.JsonValueAsync
- New APIs
- Page.WaitForNavigationAsync
- ElementHandle.QuerySelectorAsync
- ElementHandle.QuerySelectorAllAsync
- ElementHandle.XPathAsync
- ElementHandle.ScreenshotAsync
- ElementHandle.ScreenshotStreamAsync
- ElementHandle.ClickAsync
- ElementHandle.HoverAsync
- ElementHandle.BoundingBoxAsync
- JSHandle.GetPropertyAsync
- JSHandle.GetPropertiesAsync
- Features:
v0.7 Page Improvements
We are shipping Puppeteer Sharp v0.7 with many cool new features: Element selectors and evaluation over elements. But our big challenge on v0.7 was one of the hard things in computer science: Naming Things.
Puppeteer has these 5 cool functions:
$(selector)
: It callsdocument.querySelector
and returns anElementHandle
.$$(selector)
: It callsdocument.querySelectorAll
and returns anElementHandle
array.$eval(selector, function)
: It callsdocument.querySelector
and executes a function passing the element as an argument.$$eval(selector, function)
: It callsdocument.querySelectorAll
and executes a function passing the element array as an argument.$x(xpathExpression)
: It callsdocument.evaluate
and returns anElementHandle
array.
What do all these methods have in common? Hint: You can solve this using a string.Substring()
.
Yes, you guessed it right! They all have that $
symbol. And guess what? exactly, we can't name a method $
in C#.
So, in order to give these functions a clear and "csharpy" name, we decided to call them in this way:
page.$(selector)
=>page.QuerySelectorAsync(selector)
page.$$(selector)
=>page.QuerySelectorAllAsync(selector)
page.$eval(selector, function)
=>page.QuerySelectorAsync(selector).EvaluateFunctionAsync(function)
page.$$eval(selector, function)
=>page.QuerySelectorAllHandleAsync(selector).EvaluateFunctionAsync(function)
page.$(selector)
=>page.XPathAsync(selector)
These methods may be more verbose, but this naming convention makes them clearer and hopefully, easier to learn.
This is the complete list of new APIs we implemented in this version:
- Page.XPathAsync
- Page.QuerySelectorAsync
- Page.QuerySelectorAllAsync
- Page.QuerySelectorAllHandleAsync
- Page.SelectAsync
- Page.ExposeFunctionAsync
- Page.EvaluateOnNewDocumentAsync
- Page.AddScriptTagAsync
- Page.AddStyleTagAsync
- Page.PageError
- JSHandle.EvaluateFunctionAsync
- ElementHandle.EvaluateFunctionAsync
v0.6 Input simulation
-
Features
- Input simulation
-
New APIs
- ElementHandle.HoverAsync
- ElementHandle.ClickAsync
- ElementHandle.UploadFileAsync
- ElementHandle.TapAsync
- ElementHandle.FocusAsync
- ElementHandle.TypeAsync
- ElementHandle.PressAsync
- Keyboard.DownAsync
- Keyboard.UpAsync
- Keyboard.SendCharacterAsync
- Keyboard.TypeAsync
- Keyboard.PressAsync
- Mouse.MoveAsync
- Mouse.ClickAsync
- Mouse.DownAsync
- Mouse.UpAsync
- TouchScreen.TapAsync
- Page.ClickAsync
- Page.HoverAsync
- Page.FocusAsync
- Page.TypeAsync
v0.5 Frames, Network Events and Tracing
Features
- Network Events
- Tracing
- Frames
Fixes
- Fixed Browse.Close on Azure Functions
New APIs
- Request.ContinueAsync
- Request.RespondAsync
- Request.AbortAsync
- Response.BufferAsync
- Response.TextAsync
- Response.JsonAsync
- Session.TracingComplete
- Session.DetachAsync
- Page.Tracing.StartAsync
- Page.Tracing.StopAsync
- Page.EvaluateOnNewDocumentAsync
- Page.Coverage
- Page.WaitForFunctionAsync
- Browser.Targets
- Browser.PagesAsync
- Frame.WaitForSelectorAsync
- Target.CreateCDPSession