如何在WPF应用程序中将Selenium ChromeDriver连接到嵌入式CefSharp浏览器



我的MainWindow.xaml:中有一个ChromiumWebBrowser控件

<cefSharp:ChromiumWebBrowser x:Name="chromiumBrowser" Address="https://www.github.com/"/>

我正试图通过在它上面安装一个Selenium ChromeDriver:来驱动它

ChromeOptions options = new ChromeOptions();
options.BinaryLocation = AppDomain.CurrentDomain.FriendlyName;
options.AddArguments("disable-extensions");
options.AddArguments("disable-plugins");
ChromeDriver chromeDriver = new ChromeDriver(options);
chromeDriver.Url = "http://www.reddit.com";

这是一个正确的方法吗?当驱动程序试图连接到嵌入式控件时,它似乎几乎可以工作,但随后我从ChromeDriver控制台收到以下错误:

[1006/2204303.56:错误:cache_util_win.cc(21(]无法移动缓存:访问被拒绝。(0x5([1006/2204303.357:错误:cache_util.cc(139(]无法将缓存文件夹GPUCache移动到old_GPUCache_000

编辑

显然是使用选项附加了一个驱动程序。不幸的是,BinaryLocation总是会启动可执行文件的新实例。从下面的评论中,我发现正确的方法是通过调试端口连接驱动程序

CefSettings settings = new CefSettings();
settings.RemoteDebuggingPort = 9222;
settings.UserDataPath = "C:/Temp";
Cef.Initialize(settings);
browserControl = new ChromiumWebBrowser("chrome://version");

但当我试图连接它时:

ChromeOptions options = new ChromeOptions();
options.AddArguments("--remote-debugging-port=9222");
ChromeDriver driver = new ChromeDriver(options);
driver.Url = "http://www.reddit.com";

现在的错误是:System.InvalidOperationException:"会话不是从断开的连接创建的:无法连接到呈现器(会话信息:chrome=85.0.4183.121((SessionNotCreated(">

这可能是由于铬版本不匹配,因为CefSharp目前只支持高达v84的版本。我使用的是v84彩色打印机,所以我不知道这个85警告是从哪里来的。

在经历了大量脱发后,我发现这是有效的:

CefSettings settings = new CefSettings();
settings.RemoteDebuggingPort = 9222;
settings.UserDataPath = "C:/Temp";
Cef.Initialize(settings);
browserControl = new ChromiumWebBrowser("chrome://version");

这就是如何荣耀地连接到嵌入式ChromiumWebBrowser:

ChromeOptions options = new ChromeOptions();
options.DebuggerAddress = "localhost:9222";
ChromeDriverService service = ChromeDriverService.CreateDefaultService();
service.HideCommandPromptWindow = true;
ChromeDriver driver = new ChromeDriver(service, options);

诀窍是使用ChromeOptions.DebuggerAddress而不是ChromeOptions.AddArguments("--远程调试端口=XXXX"(

相关内容

最新更新