当前位置: 首页 > 知识库问答 >
问题:

如何将Selenium ChromeDriver附加到WPF应用程序中的嵌入式CefSharp浏览器?

薄涵衍
2023-03-14

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

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

我试图通过在它上附加一个硒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控制台得到以下错误:

显然,使用Options.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:“未从Disconnected创建会话:无法连接到呈现器(会话信息:Chrome=85.0.4183.121)(SessionNotCreated)”

这可能是由于chrome版本不匹配,因为CefSharp目前只支持v84。我使用的是v84 chromedriver,所以我不知道这个85警告是从哪里来的。

共有1个答案

越文康
2023-03-14

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

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(“--remote-debugging-port=xxxx”)

 类似资料:
  • 问题内容: 如何在基于Java的桌面应用程序中嵌入浏览器?我是否可以直接与嵌入式浏览器通信(而不是通过本地主机)……例如加载html文本,捕获onclick事件,获取表单值? 谢谢 问题答案: 查看Eclipse,它具有一个嵌入式浏览器,用户可以对其进行配置(它们支持多种浏览器)。 即使您通过AWT_SWT桥使用基于AWT的应用程序,也可能会嵌入他们的浏览器。 此文章可以帮助您开始。

  • 问题内容: 我想知道是否可以将Firefox浏览器作为组件嵌入基于Java Swing的应用程序中。 我已经从Internet上进行了一些研究,但是找不到答案。有人建议使用Java提供的其他浏览器组件。我认为这不是可取的,因为渲染引擎将与Firefox不同。 任何想法?非常感谢。 问题答案: 绝对可以,请先查看Mozilla Embedding for Java 这是一些示例代码

  • 打开 Polar 应用程式 按下 M600 的正面按钮(注意,您必须先退出其他应用程式)。 或 按下侧边电源按钮打开应用程式菜单,找到并轻触Polar。 或 使用语音: 请确保您的 M600 显示屏处于启动状态且您当前处于主屏幕上。 说 "Ok Google"。 说“打开 Polar” 或“开始训练”。 请见以下说明,了解如何打开 "Ok Google" 语音识别功能,以利用语音浏览 Polar

  • 我已经成功地创建了我的第一个Flask应用程序,并将我的代码分为一系列蓝图,因为我的代码库将随着时间的推移而大幅增长。我现在试图嵌入一个绘图仪表板(或者只是一个绘图视觉显示)到我的应用程序中。 现在,我正在使用一个从网络上获取的玩具示例来详细学习。第二个代码块启动dash,但我的目标是将第二个代码集成到我的主flask应用程序中。暂时来说,我希望它成为主应用程序中的一条路线(稍后我将把它解析为蓝图

  • 我正在尝试创建一个Spring Boot应用程序,除了当我访问localhost:8080时必须插入用户名和密码外,所有的东西都运行得很好。我不知道如何从我的应用程序向嵌入式tomcat添加一个新的tomcat用户。 这是我的pom XML: 下面是tomcat可见的项目结构:

  • 问题内容: 在行动方法(JSF)中,我有如下内容: 如何将byte []作为pdf发送到浏览器? 问题答案: 在action方法中,您可以通过JSF幕后获得HTTP servlet响应。然后,您至少需要将HTTP 标头设置为,并将HTTP 标头设置为(当您要弹出 另存为 对话框时)或将HTTP 标头设置为(当您想让Web浏览器处理显示本身时)。最后,您需要确保稍后再打电话以避免s飞来飞去。 开球示