diff --git a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/WebPageResponseFilter.cs b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/WebPageResponseFilter.cs
index cd97a01d..935d2282 100644
--- a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/WebPageResponseFilter.cs
+++ b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/WebPageResponseFilter.cs
@@ -4,4 +4,14 @@ public class WebPageResponseFilter
{
public string Url { get; set; } = null!;
public string[]? QueryParameters { get; set; }
+
+ ///
+ /// contains, starts, ends, equals
+ ///
+ public string UrlMatchPattern { get; set; } = "contains";
+
+ ///
+ /// Handle Content-Type: text/x-component
+ ///
+ public int PartIndex { get; set; } = -1;
}
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs
index 4a67ffeb..2bbb0acf 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs
@@ -146,37 +146,41 @@ public class PlaywrightInstance : IDisposable
{
if (e.Status != 204 &&
e.Headers.ContainsKey("content-type") &&
- e.Headers["content-type"].Contains("application/json") &&
(e.Request.ResourceType == "fetch" || e.Request.ResourceType == "xhr") &&
(excludeResponseUrls == null || !excludeResponseUrls.Any(url => e.Url.ToLower().Contains(url))) &&
(includeResponseUrls == null || includeResponseUrls.Any(url => e.Url.ToLower().Contains(url))))
{
Serilog.Log.Information($"{e.Request.Method}: {e.Url}");
- JsonElement? json = null;
+
try
{
- if (e.Status == 200 && e.Ok)
- {
- json = await e.JsonAsync();
- }
- else
- {
- Serilog.Log.Warning($"Response status: {e.Status} {e.StatusText}, OK: {e.Ok}");
- }
-
var result = new WebPageResponseData
{
Url = e.Url.ToLower(),
PostData = e.Request?.PostData ?? string.Empty,
- ResponseData = JsonSerializer.Serialize(json),
ResponseInMemory = responseInMemory
};
+ if (e.Headers["content-type"].Contains("application/json"))
+ {
+ if (e.Status == 200 && e.Ok)
+ {
+ var json = await e.JsonAsync();
+ result.ResponseData = JsonSerializer.Serialize(json);
+ }
+ }
+ else
+ {
+ var html = await e.TextAsync();
+ result.ResponseData = html;
+ }
+
if (responseContainer != null && responseInMemory)
{
responseContainer.Add(result);
}
+ Serilog.Log.Warning($"Response status: {e.Status} {e.StatusText}, OK: {e.Ok}");
var webPageResponseHooks = _services.GetServices();
foreach (var hook in webPageResponseHooks)
{