2010-11-21 1 views
1

다른 브라우저에서 실행중인 html 문서의 스냅 샷을 찍는 데 문제가 있습니다. 다른 브라우저 (Chrome, Fire Fox, ie 등)에서 실행중인 웹 페이지의 스냅 샷을 브라우저 압축 기능 테스트에 사용하고 싶지만 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

Michael과 Chad. 감사합니다. Win 응용 프로그램에서 웹 브라우저와 통신하는 방법을 찾을 수 없으므로 마침내 Selenium-RC를 사용하여 웹 페이지의 스크린 샷을 찍습니다. 다음은 문서 URL입니다. http : //seleniumhq.org/docs/05_selenium_rc.html

2

각각 다른 브라우저와 통신 할 수있는 "표준"방법을 모릅니다. 각 브라우저는 각각의 API를 사용하며 각각 유사한 기능을 구현하지만 고유 한 방식으로 악명이 높습니다.

Internet Explorer 창과 상호 작용하는 간단한 방법은 this article을 참조하십시오.

페이지가 파이어 폭스와 구글 크롬으로로드 될 때를 결정할 때, 내가 느낄 수있는 것에서이 문제를 다루는 다른 모든 사람들과 마찬가지로, 당신만큼 많은 손실이 있습니다 (Googlesearches) .

2

@Michael Hoffmann은 Internet Explorer (WebBrowser 컨트롤을 통해 사용할 수 있음) 대신 Chrome 및/또는 FireFox를 .NET에서 사용하고자하는 사람들이 많다고 말했습니다. 오늘 막 질문에 대해 - What is the best WebBrowser control that allows one proxy per instance? - Chrome을 사용하는 방법을 찾는 데 유용 할 수 있습니다. 파이어 폭스에 관해서는, 나는 모른다.

여기 쉬운 대답을 찾을 수 없을 것 같습니다. StackOverflow에 대한 많은 Google 검색 및 특정 질문이 도움이 될 수 있습니다.

편집 : 다른 생각으로, 어쩌면 당신은 여전히 ​​IE의 웹 브라우저 컨트롤을 사용하여 다음 브라우저에 명령 줄 매개 변수와 함께 사용할 수있는 크롬과 파이어 폭스 확장 기능을 할 수 있습니다. Chrome 확장 프로그램이 명령 줄 매개 변수를 응용 프로그램의 핵심 요소로 사용할 수 있는지 여부는 알 수 없습니다 (크롬에 대해서는 몇 달 전의 질문이 있습니다 - http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/2c117973a514495e?pli=1 - 우리 모두는 Chrome이 얼마나 빨리 변경되는지 알고 있습니다). 물론 사용자 컴퓨터에 2 개의 확장 프로그램을 추가하여 자신의 앱을 설치하고 싶지는 않습니다. 내 컴퓨터에 앱을 설치하는 것이 바람직합니다.

예 : C# app launch 프로세스 - "chrome http://site.com - reportLoaded "-> Chrome이로드되고 Chrome 확장 프로그램에 'reportLoaded'매개 변수가 표시됨 ->http://site.com로드 완료 -> Chrome이 내선 번호를 알립니다. -> 내선 번호로 C# 앱에 알립니다.>

관련 문제