我正在尝试使用C#控制浏览器。过去的工作方式是OLE/interop。现代浏览器似乎缺少这一点。我所需要做的就是能够导航到一个URL,然后不时地更改该URL。使用Process的问题。启动("http://example.com"(这通常会产生几个子进程,我无法确定以后要杀死的确切进程。多次调用它只会创建新的子进程。我尝试使用WebBrowser和WebView控件。是的,这些控件给了我想要的控制,但渲染引擎嵌入在应用程序中,而且太旧了,没有任何网站允许这些控件继续工作。
我发现了一个叫WebDriver的东西。起初,这似乎是一个很好的解决方案,只是它似乎非常依赖于浏览器的确切构建,并且依赖于Selenium。它可能对自动测试非常有效,我不相信如果浏览器自我更新,它会很好地用于长期的浏览器控制。
接下来是头孢夏普。我以前用过这个,但它似乎也有一个嵌入的过时的渲染引擎,许多网站抱怨它也过时了。即使CefSharp不时更新,我每次都需要重新构建我的应用程序。我在这里看到的问题是,渲染引擎被嵌入到一个程序集中,该程序集与我的应用程序一起分发。是的,我看到了大量其他嵌入式解决方案。其中许多已经好几年没有更新了。
理想情况下,我可以使用类似WebDriver的软件来控制浏览器,该软件适用于任何浏览器版本。我可以启动像FireFox或Chrome这样的外部浏览器。任何浏览器都有API吗?这正是我想使用现代浏览器实现的伪代码:
ModernBrowser br = new ModernBrowser();
br.Navigate("about:blank"); // clear out last page
if(some_flag)
br.Navigate(Url); // navigate to new page.
If(done)
br.Close();
br = null;
这就是我所需要的。非常简单。我正在尝试实现一个媒体播放系统。除了我需要一个现代浏览器来播放Pandora、Spotify或任何其他基于网络的系统之外,所有的代码都很好用。它们都需要最新的浏览器版本,或者根本不起作用。在我的应用程序中嵌入渲染引擎是一场噩梦。当然,我今天可以上班。我只是对明天不确定。
我决定试试CefSharp,它有效。我意识到我必须不时地更新这个。我想指出的是,如果你决定使用CefSharp作为嵌入式浏览器,不要在你的实时项目中使用NuGet。创建一个一次性项目并安装CefSharp组件。截至本条目发布之日,Nuget安装破坏了您的C#项目,并使每个程序集都无法使用。我所做的是创建了一个一次性项目,添加了CefSharp程序集,然后将依赖的二进制文件放在一个新文件夹中。我把我的现场项目作为X86的目标,这很有效。