Как получить HTML-документ в другом браузере, как изображение, когда HTML-документ полностью загружен? - PullRequest
1 голос
/ 21 ноября 2010

У меня проблема с созданием снимка HTML-документа, работающего в разных браузерах. Я хочу сделать снимки веб-страницы, запущенной в другом браузере (Chrome, Fire Fox и т. Д.) Для проверки совместимости браузера, но у меня проблема со временем загрузки 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-документа в другом браузере?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 27 декабря 2010

Как сказал @Michael Hoffmann, есть множество людей, которые хотят использовать Chrome и / или FireFox в .NET вместо IE (который вы можете использовать через элемент управления WebBrowser).Только сегодня возник вопрос - Каков наилучший элемент управления WebBrowser, позволяющий использовать один прокси-сервер на экземпляр? - о самом деле, которое может пригодиться для поиска способа использования Chrome.Что касается FireFox, я понятия не имею.

Я не думаю, что вы найдете легкий ответ здесь.Многие поисковые запросы в Google и более конкретные вопросы по StackOverflow могут принести вам пользу.

Редактировать: Как еще одна мысль, может быть, вы можете сделать расширения для Chrome и Firefox, которые вы можете использовать вместес параметрами командной строки для браузеров, а затем по-прежнему использовать элемент управления WebBrowser для IE.Я не знаю, могут ли расширения браузера отключить параметры командной строки для приложения (для Chrome вопрос уже несколько месяцев - http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/2c117973a514495e?pli=1 - и мы все знаем, как быстро меняется Chrome), но это стоитвыстрел.Конечно, это действительно практично только для приложения на вашем компьютере, я сомневаюсь, что вы хотите установить собственное приложение, а также 2 расширения на компьютер пользователя:

например: приложение C # запускает Process - "chromehttp://site.com -reportLoaded "-> Chrome загружается, и ваше расширение Chrome видит параметр reportLoaded -> http://site.com завершает загрузку -> Chrome уведомляет ваше расширение -> ваше расширение уведомляет ваш C #приложение -> вы делаете снимок.

2 голосов
/ 27 декабря 2010

Я не знаю ни одного "стандартного" способа, которым вы могли бы общаться с каждым из этих разных браузеров - каждый из них использует свой собственный API, и, хотя каждый из них реализует схожие функции, они печально известны тем, что все делают по-своему.

Простой способ взаимодействия с окнами Internet Explorer см. В этой статье .

Что касается определения, когда страница загружается с Firefox и Google Chrome, япотери, как и вы, как и все остальные, решают эту проблему из того, что я могу сказать (через несколько Google поисков ).

1 голос
/ 29 декабря 2010

Спасибо, Майкл и Чад. Я не могу найти способ взаимодействия с веб-браузерами из приложения win, поэтому я наконец-то использую Selenium-RC, чтобы сделать снимок экрана с веб-страницей в моем проекте, и вотURL документации: http://seleniumhq.org/docs/05_selenium_rc.html

...