using HtmlAgilityPack; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Beam.Abstractions; using Beam.Downloaders; using Beam.Models; namespace Beam.Stealth { public class StealthUnitPageDownloader : UnitDownloader where RawType : IDocument { public StealthConfig Config { get; } public StealthAsyncManipulator Manipulator { get; } private ILogger? Logger => Config.Logger; public StealthUnitPageDownloader(UnitDownloaderOptions options, StealthConfig config, StealthAsyncManipulator manipulator) : base(options) { Config = config; Manipulator = manipulator; } protected override async Task DownloadToStream(string url, int bufferSize, Stream destinationStream, IProgress progress, CancellationToken ct) { var driver = Config.Driver; await driver.Navigate().GoToUrlAsync(url); await Manipulator(driver); byte[] bytes = Encoding.UTF8.GetBytes(driver.PageSource); await destinationStream.WriteAsync(bytes, ct); } } }