-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProgram.cs
81 lines (68 loc) · 2.47 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
using System.Diagnostics;
using PuppeteerSharp;
using Flurl.Http;
var stopwatch = new Stopwatch();
stopwatch.Start();
var fetcher = new BrowserFetcher();
await fetcher.DownloadAsync(BrowserFetcher.DefaultChromiumRevision);
//await fetcher.DownloadAsync("1115057");
//var path = fetcher.GetExecutablePath("1115057");
Console.WriteLine($"Downloaded: {stopwatch.ElapsedMilliseconds}");
var browserContext = await Puppeteer.LaunchAsync(new()
{
Headless = true,
//ExecutablePath = path,
Args = new[] { "--no-sandbox", "--no-zygote" },
EnqueueAsyncMessages = false,
});
Console.WriteLine($"New context: {stopwatch.ElapsedMilliseconds}");
var url = "https://legend-bracelet.myshopify.com/collections/legend-hats?view=hats-1688039304264&slScreenshot=true";
var page = await browserContext.NewPageAsync();
Console.WriteLine($"New page: {stopwatch.ElapsedMilliseconds}");
page.Request += (object sender, RequestEventArgs e) =>
{
Console.WriteLine($"{e.Request.Url}: {stopwatch.ElapsedMilliseconds}");
};
await page.SetViewportAsync(new ViewPortOptions { Height = 1050, Width = 1400 });
//await page.SetViewportAsync(new ViewPortOptions { Height = 720, Width = 991 });
await page.SetRequestInterceptionAsync(true);
page.Request += async (_, args) =>
{
switch (args.Request.ResourceType)
{
case ResourceType.StyleSheet:
var response = await args.Request.Url.GetAsync();
var text = await response.GetStringAsync();
// Replacing the first 9 occurrences will also fix it
//var text = new Regex("992px").Replace(text, "", 9);
await args.Request.RespondAsync(new ResponseData
{
// Will stall
//Body = text,
// Will not stall!
Body = text.Replace("column-count: 3;", "column-count: 4;"),
Status = (System.Net.HttpStatusCode)response.StatusCode
});
break;
default:
await args.Request.ContinueAsync();
return;
}
};
Console.WriteLine($"Set viewport: {stopwatch.ElapsedMilliseconds}");
try
{
await page.GoToAsync(url, new NavigationOptions
{
Timeout = 5000,
WaitUntil = new[] { WaitUntilNavigation.Networkidle0 }
});
}
catch (NavigationException e)
{
Console.WriteLine($"{e.Message}");
}
Console.WriteLine($"Navigated: {stopwatch.ElapsedMilliseconds}");
await page.ScreenshotAsync("./output.png");
Console.WriteLine($"Done: {stopwatch.ElapsedMilliseconds}");