2010-11-21 11 views
1

さまざまなブラウザで動作するhtmlドキュメントのスナップショットを作成する際に問題があります。 私はブラウザコンプ能力テストのために別のブラウザ(すなわちなどクローム、ファイアーフォックス)でWebページの実行のスナップショットを取りたいが、私は、HTML文書のロード時間の問題を取得し、ここに私のコードで、Htmlドキュメントが完全に読み込まれたときに、別のブラウザでHtmlドキュメントを取得する方法

private void button1_Click(object sender, EventArgs e) 
{ 
    //Process p = new Process(); 
    // p.StartInfo = new ProcessStartInfo(); 

    foreach (string key in ConfigurationManager.AppSettings.Keys) 
    { 
     Process p = new Process(); 
     p.StartInfo = new ProcessStartInfo(); 
     p.StartInfo.FileName = ConfigurationManager.AppSettings[key]; 
     p.StartInfo.Arguments = @"www.google.com"; 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; 
     p.Start(); 
     p.PriorityClass = ProcessPriorityClass.High; 
     System.Threading.Thread.Sleep(30000); 

     Rectangle bounds = Screen.GetBounds(Point.Empty); 
     using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height)) 
     { 
      using (Graphics g = Graphics.FromImage(bitmap)) 
      { 
       g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size); 
      } 
      bitmap.Save("E:\\ChandraPrakash\\My Testings\\Screen Grab\\Images\\screen_shot" + key + ".jpg", ImageFormat.Jpeg); 
     } 
     this.WindowState = FormWindowState.Normal; 
     this.BringToFront(); 
     this.Focus(); 
     //p.Kill(); 
    }   
} 
ています

と私はapp.configのコードは、

ここ
<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="Chrome" value="C:\Documents and Settings\uba\Local Settings\Application Data\Google\Chrome\Application\chrome.exe"/> 
    <add key="Firefox" value="C:\Program Files\Mozilla Firefox\firefox.exe"/> 
    <add key="Safari" value="C:\Program Files\Safari\Safari.exe"/> 
    <add key="Ie" value="C:\Program Files\Internet Explorer\IEXPLORE.EXE"/> 
    <add key="Opera" value="C:\Program Files\Opera\opera.exe"/> 
    </appSettings> 
</configuration> 

である私はSystem.Threading.Thread.Sleep(10000);を使用していますが、ページをゆっくりのでロードされている場合、それは動作しません、どのように私は、ページの読み込み時間を知ることができますか?別のブラウザでHtmlドキュメントのスクリーンショットを取得する別の方法はありますか?

ありがとうございます。

+0

私はGoogleで検索するのに多くの時間を費やしていますが、解決策が見つかりません。私にちょっとしたアイデアを教えてくださいc#windowsアプリケーションからさまざまなブラウザ(Chrome、Mozilla、Ie、Opera)と通信します。助けてください。 –

答えて

1

マイケルとチャドありがとうございました。私はwinアプリケーションからウェブブラウザと通信する方法を見つけることができません。私は最終的にSelenium-RCを使用してウェブページのスクリーンショットを取得します。 http://seleniumhq.org/docs/05_selenium_rc.html

2

それぞれが独自のAPIを使用していて、それぞれが同じような機能を実装していますが、独自の方法で操作することはよく知られています。

Internet Explorerのウィンドウと簡単にやりとりする方法については、this articleを参照してください。

ページがFirefoxとGoogle Chromeで読み込まれたときを判断するのは、私が知ることから誰もがこの問題に取り組んでいるように、あなたが犠牲になっているからです(Googlesearches) 。

2

@Michael Hoffmannによると、Internet ExplorerではなくChromeでFireFoxやChromeを使いたい人がたくさんいます(Webブラウザコントロールから使用できます)。ちょうど今日、質問があった - What is the best WebBrowser control that allows one proxy per instance? - については、クロムを使用する方法を見つけるために使用される可能性があります。 FireFoxに関しては、わかりません。

私はここで簡単な答えを見つけるつもりはないと思います。 StackOverflowに関するGoogleの検索や具体的な質問の多くは、あなたに役立つかもしれません。

編集: 別の考えとしては、多分あなたはまだIEのためのWebBrowserコントロールを使用し、その後ブラウザへのコマンドラインパラメータと組み合わせて使用​​することができChromeとFirefox用の拡張機能を作ることができます。私はブラウザの拡張機能がアプリケーションのコマンドラインパラメータをオフにすることができるかどうか分かりません(Chromeについては数ヶ月前にそれについての質問があります - http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/2c117973a514495e?pli=1 - 私たちは皆、どれほど高速なChromeの変更か知っています)。もちろん、これは実際にあなた自身のマシン上のアプリケーションにのみ実用的ですが、あなた自身のアプリをインストールしたいと思っています。さらに、ユーザーのコンピュータに2つの拡張機能を追加することはできません:

例:C#app launch processes - "chrome http://site.com - "reportLoaded" - > Chromeが読み込まれ、Chrome拡張機能に 'reportLoaded'パラメータが表示されます - >http://site.comの読み込みが終了しました - > Chromeから拡張機能に通知されます - >あなたの内線がC#アプリに通知します。

関連する問題