我想以编程方式启动带有URL的浏览器,等待它完成,然后关闭浏览器

时间:2012-03-10 22:59:35

标签: c# html5 firefox internet-explorer-9 chromium

我创建了一个Html 5页面,它提供了重要的服务器端功能。不幸的是,它必须在带有画布的Html 5浏览器(Chrome,IE9或Firefox)中运行才能生成我需要的结果。它是完全独立的,通过URL获取所需的参数,并准备好在OnLoad事件准备好发送时关闭。到目前为止一切都很好。

以下过程需要自动化(无人眼或交互),并且将在Web服务中运行(不在浏览器中运行)。理想情况下,我不想浪费等待繁忙的额外周期,或者通过等待很长时间来简单地希望过程完成来延迟结果。我需要:

  1. 使用C#打开带有URL的浏览器(最好是Chrome)。
  2. 等待页面完全加载 - 理想情况下接收某种回调。
  3. 完成后关闭浏览器页面,再次使用C#。
  4. 我们尝试过使用IE9。有C#支持启动IE9,等到不忙,优雅地关闭浏览器;但是,页面异步加载资源(没有办法解决这个问题),所以我们得到的信号是它在资源加载期间不再繁忙 - 而不是在页面完成时。添加忙等待将消耗宝贵的服务器端cpu周期。

    一个简单的Create Process调用会很好,但只有在浏览器可以用一些html关闭时才能工作 - 但是由于浏览器中的安全措施,我找不到一种可靠的方法来使用html命令关闭一个从命令行启动的浏览器(我确实看到你可以关闭已经打开的页面生成的标签 - 仅限firefox,但这没有帮助。)

    有谁知道如何实现这一目标?再一次 - 在任何过程中都没有人类参与,没有人眼会看到页面或以任何方式与之交互。该页面仅在服务器计算机上运行,​​永远不会部署到客户端计算机。

2 个答案:

答案 0 :(得分:1)

我建议使用WebBrowser控件加载HTML。一旦获得数据,使用ObjectForScripting调用c#方法完成后通知。

请参阅http://www.codeproject.com/Tips/130267/Call-a-C-Method-From-JavaScript-Hosted-in-a-WebBro

你甚至不必显示webbrowser控件。

如果您有任何疑问,请与我们联系。希望它有所帮助!

答案 1 :(得分:0)

自动化浏览器 - 这就是Selenium所做的事情。我认为它非常适合这项任务,并且有很好的C#支持。它甚至可以使用Selenium RC服务器在远程计算机上运行浏览器。

相关问题