

The details of DownloadFileRequiringHeadersAndCookies are here. Var cookieContainer = new CookieContainer() ĬookieContainer.Add(new Cookie(cookie.Name, cookie.Value, cookie.Path, cookie.Domain)) Populate the Cookie Container like this: private CookieContainer BuildCookieContainer(IEnumerable cookies) NEED THIS TIMEOUT TO KEEP THE BROWSER OPEN WHILE THE FILE IS DOWNLOADING!Īwait page.WaitForTimeoutAsync(1000 * configs.DownloadDurationEstimateInSeconds)

Var cookieContainer = BuildCookieContainer(pageCookies) Īwait DownloadFileRequiringHeadersAndCookies(getUrl, fullPath, cookieContainer, cancellationToken) Īwait page.ClickAsync("button") Var pageCookies = await page.GetCookiesAsync() Add the cookies to a container for the upcoming Download GET request If (contentType.Contains("application/vnd.ms-excel"))


Handle the response with the Excel download Page.Response += async (sender, responseCreatedEventArgs) => Handle multiple responses and process the Download await using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions ))Īwait using (var page = await browser.NewPageAsync()) Once I had that particular response, I had to attach headers and cookies for the remote server to send the downloadable data in the response. In essence, before the button click, I had to process multiple responses and handle a single response with the download. I needed both Headers and Cookies set before the download would start. I had a more difficult variation of this, using Puppeteer Sharp. const puppeteer = require ( 'puppeteer' ) const fs = require ( 'fs' ) const path = require ( 'path' ) require ( 'dotenv' ). The code is for a very specific situation and therefore would need to be modified accordingly dependant on your requirements. The full code can be seen below, and the repo is available at. Requirements - For this you'll need a recent version of NodeJs (tested with version 14.14.0). This gave me a good excuse to try and automate the process as much as possible using puppeteer. I needed to download a video that was behind a login screen.
