我的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"(