From a97aa8aee1e3e2ef119100ef154373b3ba3ac51e Mon Sep 17 00:00:00 2001 From: Haiping Chen Date: Fri, 21 Jun 2024 13:23:18 -0500 Subject: [PATCH] OnDataFetched --- .../Browsing/Models/ElementLocatingArgs.cs | 1 + .../Browsing/Models/PageActionArgs.cs | 7 +++++ .../PlaywrightDriver/PlaywrightInstance.cs | 30 +++++++++++++++++-- .../PlaywrightWebDriver.GoToPage.cs | 19 ++++++++++-- .../PlaywrightWebDriver.LocateElement.cs | 2 +- 5 files changed, 53 insertions(+), 6 deletions(-) diff --git a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/ElementLocatingArgs.cs b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/ElementLocatingArgs.cs index 3b96c760..9dd5334a 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/ElementLocatingArgs.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/ElementLocatingArgs.cs @@ -31,4 +31,5 @@ public class ElementLocatingArgs /// Draw outline around the element /// public bool Highlight { get; set; } + public string HighlightColor { get; set; } = "red"; } diff --git a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs index 99591b1e..f583febb 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs @@ -11,4 +11,11 @@ public class PageActionArgs public string Url { get; set; } = null!; public bool OpenNewTab { get; set; } = false; + + /// + /// On page data fetched + /// + public DataFetched? OnDataFetched { get; set; } } + +public delegate void DataFetched(string url, string data); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs index 2b0847d5..1bdb53f8 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs @@ -71,7 +71,17 @@ public class PlaywrightInstance : IDisposable Serilog.Log.Information($"Page is closed: {e.Url}"); }; Serilog.Log.Information($"New page is created: {page.Url}"); - await page.SetViewportSizeAsync(1280, 800); + await page.SetViewportSizeAsync(1600, 900); + + /*page.Response += async (sender, e) => + { + Serilog.Log.Information($"Response: {e.Url}"); + if (e.Headers.ContainsKey("content-type") && e.Headers["content-type"].Contains("application/json")) + { + var json = await e.JsonAsync(); + Serilog.Log.Information(json.ToString()); + } + };*/ }; _contexts[ctxId].Close += async (sender, e) => @@ -84,10 +94,26 @@ public class PlaywrightInstance : IDisposable return _contexts[ctxId]; } - public async Task NewPage(string ctxId) + public async Task NewPage(string ctxId, DataFetched? fetched) { await InitContext(ctxId); var page = await _contexts[ctxId].NewPageAsync(); + + if (fetched != null) + { + page.Response += async (sender, e) => + { + if (e.Headers.ContainsKey("content-type") && + e.Headers["content-type"].Contains("application/json") && + e.Request.ResourceType == "fetch") + { + Serilog.Log.Information($"Response: {e.Url}"); + var json = await e.JsonAsync(); + fetched(e.Url.ToLower(), JsonSerializer.Serialize(json)); + } + }; + } + return page; } diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs index 3a80d07d..4fb91660 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs @@ -1,3 +1,5 @@ +using System.Linq; + namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver; public partial class PlaywrightWebDriver @@ -9,7 +11,7 @@ public partial class PlaywrightWebDriver try { // Check if the page is already open - if (!args.OpenNewTab && context.Pages.Count > 0) + /*if (!args.OpenNewTab && context.Pages.Count > 0) { foreach (var p in context.Pages) { @@ -22,10 +24,11 @@ public partial class PlaywrightWebDriver return result; } } - } + }*/ - var page = args.OpenNewTab ? await _instance.NewPage(message.ContextId) : + var page = args.OpenNewTab ? await _instance.NewPage(message.ContextId, fetched: args.OnDataFetched) : _instance.GetPage(message.ContextId); + var response = await page.GotoAsync(args.Url); await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded); await page.WaitForLoadStateAsync(LoadState.NetworkIdle); @@ -50,4 +53,14 @@ public partial class PlaywrightWebDriver return result; } + + private void Page_Response1(object sender, IResponse e) + { + throw new NotImplementedException(); + } + + private void Page_Response(object sender, IResponse e) + { + throw new NotImplementedException(); + } } diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LocateElement.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LocateElement.cs index bb7f0fa2..4bbd84ac 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LocateElement.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LocateElement.cs @@ -130,7 +130,7 @@ public partial class PlaywrightWebDriver await page.EvaluateAsync($@" (element) => {{ - element.style.outline = '2px solid red'; + element.style.outline = '2px solid {location.HighlightColor}'; }}", handle); result.IsHighlighted = true;