BrowserActionArgs
This commit is contained in:
parent
08ecff3ea5
commit
9003665f04
|
|
@ -4,7 +4,7 @@ namespace BotSharp.Abstraction.Browsing;
|
|||
|
||||
public interface IWebBrowser
|
||||
{
|
||||
Task<BrowserActionResult> LaunchBrowser(MessageInfo message);
|
||||
Task<BrowserActionResult> LaunchBrowser(MessageInfo message, BrowserActionArgs args);
|
||||
Task<BrowserActionResult> ScreenshotAsync(MessageInfo message, string path);
|
||||
Task<BrowserActionResult> ScrollPage(MessageInfo message, PageActionArgs args);
|
||||
|
||||
|
|
|
|||
|
|
@ -2,5 +2,5 @@ namespace BotSharp.Abstraction.Browsing.Models;
|
|||
|
||||
public class BrowserActionArgs
|
||||
{
|
||||
|
||||
public bool Headless { get; set; }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
namespace BotSharp.Abstraction.Browsing.Models;
|
||||
|
||||
[Obsolete("This class is deprecated, use BrowserActionArgs instead.")]
|
||||
public class BrowserActionParams
|
||||
{
|
||||
public Agent Agent { get; set; }
|
||||
|
|
|
|||
|
|
@ -2,5 +2,5 @@ namespace BotSharp.Plugin.MetaAI.Settings;
|
|||
|
||||
public class MetaAiSettings
|
||||
{
|
||||
public fastTextSetting fastText { get; set; }
|
||||
public fastTextSetting fastText { get; set; } = new();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using Microsoft.Playwright;
|
||||
using System.IO;
|
||||
|
||||
namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver;
|
||||
|
|
@ -21,33 +20,29 @@ public class PlaywrightInstance : IDisposable
|
|||
|
||||
public IPage GetPage(string id, string? pattern = null)
|
||||
{
|
||||
InitInstance(id).Wait();
|
||||
return _contexts[id].Pages.LastOrDefault();
|
||||
}
|
||||
|
||||
public async Task<IBrowserContext> InitInstance(string ctxId)
|
||||
public async Task<IBrowserContext> GetContext(string ctxId)
|
||||
{
|
||||
return _contexts[ctxId];
|
||||
}
|
||||
|
||||
public async Task<IBrowserContext> InitContext(string ctxId, BrowserActionArgs args)
|
||||
{
|
||||
if (_contexts.ContainsKey(ctxId))
|
||||
return _contexts[ctxId];
|
||||
|
||||
if (_playwright == null)
|
||||
{
|
||||
_playwright = await Playwright.CreateAsync();
|
||||
}
|
||||
return await InitContext(ctxId);
|
||||
}
|
||||
|
||||
public async Task<IBrowserContext> InitContext(string ctxId)
|
||||
{
|
||||
if (_contexts.ContainsKey(ctxId))
|
||||
return _contexts[ctxId];
|
||||
|
||||
string tempFolderPath = $"{Path.GetTempPath()}\\playwright\\{ctxId}";
|
||||
|
||||
_contexts[ctxId] = await _playwright.Chromium.LaunchPersistentContextAsync(tempFolderPath, new BrowserTypeLaunchPersistentContextOptions
|
||||
{
|
||||
#if DEBUG
|
||||
Headless = false,
|
||||
#else
|
||||
Headless = true,
|
||||
#endif
|
||||
Headless = args.Headless,
|
||||
Channel = "chrome",
|
||||
ViewportSize = new ViewportSize
|
||||
{
|
||||
|
|
@ -100,8 +95,13 @@ public class PlaywrightInstance : IDisposable
|
|||
|
||||
public async Task<IPage> NewPage(string ctxId, DataFetched? fetched)
|
||||
{
|
||||
await InitContext(ctxId);
|
||||
var page = await _contexts[ctxId].NewPageAsync();
|
||||
var context = await GetContext(ctxId);
|
||||
var page = await context.NewPageAsync();
|
||||
|
||||
// 许多网站为了防止信息被爬取,会添加一些防护手段。其中之一是检测 window.navigator.webdriver 属性。
|
||||
// 当使用 Playwright 打开浏览器时,该属性会被设置为 true,从而被网站识别为自动化工具。通过以下方式屏蔽这个属性,让网站无法识别是否使用了 Playwright
|
||||
var js = @"Object.defineProperties(navigator, {webdriver:{get:()=>false}});";
|
||||
await page.AddInitScriptAsync(js);
|
||||
|
||||
if (fetched != null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ public partial class PlaywrightWebDriver
|
|||
public async Task<BrowserActionResult> GoToPage(MessageInfo message, PageActionArgs args)
|
||||
{
|
||||
var result = new BrowserActionResult();
|
||||
var context = await _instance.InitInstance(message.ContextId);
|
||||
var context = await _instance.GetContext(message.ContextId);
|
||||
try
|
||||
{
|
||||
// Check if the page is already open
|
||||
|
|
|
|||
|
|
@ -2,9 +2,9 @@ namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver;
|
|||
|
||||
public partial class PlaywrightWebDriver
|
||||
{
|
||||
public async Task<BrowserActionResult> LaunchBrowser(MessageInfo message)
|
||||
public async Task<BrowserActionResult> LaunchBrowser(MessageInfo message, BrowserActionArgs args)
|
||||
{
|
||||
var context = await _instance.InitInstance(message.ContextId);
|
||||
var context = await _instance.InitContext(message.ContextId, args);
|
||||
var result = new BrowserActionResult
|
||||
{
|
||||
IsSuccess = context.Pages.Count > 0
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ namespace BotSharp.Plugin.WebDriver.Drivers.SeleniumDriver;
|
|||
|
||||
public partial class SeleniumWebDriver
|
||||
{
|
||||
public async Task<BrowserActionResult> LaunchBrowser(MessageInfo message)
|
||||
public async Task<BrowserActionResult> LaunchBrowser(MessageInfo message, BrowserActionArgs args)
|
||||
{
|
||||
var context = await _instance.InitInstance(message.ContextId);
|
||||
var result = new BrowserActionResult()
|
||||
|
|
|
|||
|
|
@ -31,7 +31,10 @@ public class OpenBrowserFn : IFunctionCallback
|
|||
ContextId = convService.ConversationId,
|
||||
MessageId = message.MessageId
|
||||
};
|
||||
var result = await _browser.LaunchBrowser(msgInfo);
|
||||
var result = await _browser.LaunchBrowser(msgInfo, new BrowserActionArgs
|
||||
{
|
||||
Headless = false
|
||||
});
|
||||
result = await _browser.GoToPage(msgInfo, new PageActionArgs
|
||||
{
|
||||
Url = url
|
||||
|
|
|
|||
Loading…
Reference in a new issue