diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/IWebBrowser.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/IWebBrowser.cs index dba3a491..a023f081 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/IWebBrowser.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/IWebBrowser.cs @@ -2,7 +2,7 @@ namespace BotSharp.Plugin.WebDriver.Drivers; public interface IWebBrowser { - Task LaunchBrowser(string? url); + Task LaunchBrowser(string? url); Task ScreenshotAsync(string path); Task InputUserText(BrowserActionParams actionParams); Task InputUserPassword(BrowserActionParams actionParams); @@ -11,7 +11,7 @@ public interface IWebBrowser Task ChangeListValue(BrowserActionParams actionParams); Task CheckRadioButton(BrowserActionParams actionParams); Task ChangeCheckbox(BrowserActionParams actionParams); - Task GoToPage(BrowserActionParams actionParams); + Task GoToPage(string url); Task ExtractData(BrowserActionParams actionParams); Task EvaluateScript(string script); Task CloseBrowser(); 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 bd8304fb..0f1d2a14 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs @@ -1,11 +1,23 @@ +using Microsoft.Extensions.Logging; + namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver; public partial class PlaywrightWebDriver { - public async Task GoToPage(BrowserActionParams actionParams) + public async Task GoToPage(string url) { - await _instance.Page.GotoAsync(actionParams.Context.Url); - await _instance.Page.WaitForLoadStateAsync(LoadState.DOMContentLoaded); - return true; + try + { + var response = await _instance.Page.GotoAsync(url); + await _instance.Page.WaitForLoadStateAsync(LoadState.DOMContentLoaded); + + return response.Status == 200; + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + } + + return false; } } diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LaunchBrowser.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LaunchBrowser.cs index f91e2741..32554c21 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LaunchBrowser.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.LaunchBrowser.cs @@ -1,8 +1,10 @@ +using Microsoft.Extensions.Logging; + namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver; public partial class PlaywrightWebDriver { - public async Task LaunchBrowser(string? url) + public async Task LaunchBrowser(string? url) { await _instance.InitInstance(); @@ -16,15 +18,23 @@ public partial class PlaywrightWebDriver if (!string.IsNullOrEmpty(url)) { - var webDriverService = _services.GetRequiredService(); - url = webDriverService.ReplaceToken(url); - - var response = await page.GotoAsync(url, new PageGotoOptions + try { - Timeout = 15 * 1000 - }); - await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded); + var response = await page.GotoAsync(url, new PageGotoOptions + { + Timeout = 15 * 1000 + }); + await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded); + return response.Status == 200; + } + catch(Exception ex) + { + _logger.LogError(ex.Message); + } + return false; } } + + return true; } } diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs index 42bdecd9..33019fbb 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs @@ -19,14 +19,19 @@ public class GoToPageFn : IFunctionCallback var args = JsonSerializer.Deserialize(message.FunctionArgs); var agentService = _services.GetRequiredService(); var agent = await agentService.LoadAgent(message.CurrentAgentId); - await _browser.GoToPage(new BrowserActionParams(agent, args, message.MessageId)); - message.Content = $"Page {args.Url} is open."; var webDriverService = _services.GetRequiredService(); + var url = webDriverService.ReplaceToken(args.Url); + + url = url.Replace("https://https://", "https://"); + + var result = await _browser.GoToPage(url); + message.Content = result ? $"Page {url} is open." : $"Page {url} open failed."; + var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await _browser.ScreenshotAsync(path); - return true; + return result; } } diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs index 945e1fff..0cedca0d 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs @@ -17,14 +17,26 @@ public class OpenBrowserFn : IFunctionCallback public async Task Execute(RoleDialogModel message) { var args = JsonSerializer.Deserialize(message.FunctionArgs); - await _browser.LaunchBrowser(args.Url); - message.Content = string.IsNullOrEmpty(args.Url) ? $"Launch browser with blank page successfully." : $"Open website {args.Url} successfully."; var webDriverService = _services.GetRequiredService(); + var url = webDriverService.ReplaceToken(args.Url); + + url = url.Replace("https://https://", "https://"); + var result = await _browser.LaunchBrowser(url); + + if (result) + { + message.Content = string.IsNullOrEmpty(url) ? $"Launch browser with blank page successfully." : $"Open website {url} successfully."; + } + else + { + message.Content = "Launch browser failed."; + } + var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await _browser.ScreenshotAsync(path); - return true; + return result; } }