如何检测新启动的浏览器进程中的页面加载是否失败?

时间:2009-12-14 12:24:46

标签: c# asp.net logging error-logging

我使用Process.Start("firefox.exe", "http://localhost/page.aspx"); 我怎么知道页面失败或没有? 要么 如何通过HttpWebRequest知道,HttpWebResponse页面是否失败?

当我使用

HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create("somepage.aspx");
HttpWebResponse loWebResponse = (HttpWebResponse)myReq.GetResponse();
Console.Write("{0},{1}",loWebResponse.StatusCode, loWebResponse.StatusDescription);

如何返回错误详情?

不需要额外的插件和框架。我只想通过.net

选择这个问题

任何想法

4 个答案:

答案 0 :(得分:4)

使用Watin自动化firefox而不是Process.Start。它是一个浏览器自动化框架,可以让您正确监控正在发生的事情。

http://watin.sourceforge.net/

编辑:另请参阅Google Webdriver http://google-opensource.blogspot.com/2009/05/introducing-webdriver.html

答案 1 :(得分:2)

如果你正在产生一个子进程,那就很难了,你可能需要使用每个浏览器的特定API(例如,FF和IE之间不一样)。

在许多情况下,exe检测到现有实例并在那里转发请求(因此您不能信任退出代码,因为甚至还没有在正确的exe中请求页面),这没有帮助。

就个人而言,我尽量避免为这种情况假设任何特定的浏览器;只需启动网址:

Process.Start("http://somesite.com");

这将使用用户的默认浏览器。你必须希望它出现 - 你不能(可靠而强有力地)在没有大量工作的情况下检查外部。

另一个选择是自己阅读数据(WebClient.Download*) - 但这可能会遇到复杂的cookie,登录,用户代理意识等问题。

答案 2 :(得分:1)

使用HttpWebRequest类或WebClient类来检查这一点。如果URL不存在,我不认为Process.Start会返回一些内容。

答案 3 :(得分:0)

不要以此形式启动页面。而是创建一个加载http://localhost:<port>/wrapper.html然后加载http://localhost/page.aspxhttp://localhost:<port>/pass.html的本地http://localhost:<port>/fail.html。 localhost:是一个由您的应用程序实现的简单HTTP服务器接口。

我们的想法是,Javascript在浏览器中提供了一个API ,这比浏览器外部上的API要标准得多。由于wrapper.html上的Javascript来自与后续资源相同的服务器甚至端口,因此它应满足当前浏览器中的同源策略。