C # WebBrowser контроль сохранить веб-страницу как изображение, проблема перенаправления - PullRequest
3 голосов
/ 03 февраля 2012

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

Кажется, что он отлично работает для многих URL, но не для некоторых, включая www.google.co.uk, где он сохраняет пустую страницу.IBM.com и microsoft.com работают, думаю, что это может быть связано с тем, что сайт выполняет перенаправление.

Это код:

 int width = -1;
        int height = -1;

        // Load the webpage into a WebBrowser control
        WebBrowser wb = new WebBrowser();
        wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
        wb.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated);

        wb.AllowNavigation = true;
        wb.ScrollBarsEnabled = false;
        wb.ScriptErrorsSuppressed = true;
        wb.Navigate(url);

        while (wb.ReadyState != WebBrowserReadyState.Complete)
        {
            Debug.WriteLine("Loading loop..");
            Application.DoEvents();
        }



        // Set the size of the WebBrowser control
        wb.Width = width;
        wb.Height = height;

        if (width == -1)
        {
            // Take Screenshot of the web pages full width
            wb.Width = wb.Document.Body.ScrollRectangle.Width;
        }

        if (height == -1)
        {
            // Take Screenshot of the web pages full height
            wb.Height = wb.Document.Body.ScrollRectangle.Height;
        }

        // Get a Bitmap representation of the webpage as it's rendered in the WebBrowser control
        Bitmap bitmap = new Bitmap(wb.Width, wb.Height);
        wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
        wb.Dispose();

        bitmap.Save(filename, System.Drawing.Imaging.ImageFormat.Png);
        Debug.WriteLine("Saved");
        Application.Exit();

Любые идеи, почему некоторые сайты не 't работа?

Спасибо за ваше время

1 Ответ

0 голосов
/ 12 февраля 2012

Вы, вероятно, пытаетесь сохранить его до того, как он завершит загрузку, обнаружение, является ли WB полностью загруженным, является самой большой проблемой управления WB, я разработал несколько методов за эти годы, поэтому он потребовал много работы, и тамСуществуют различные методы, которые вам нужно реализовать.

Кроме того, не забывайте, что некоторые данные HTML могут загружаться во фрейм, поэтому вам может понадобиться получить ссылку на фрейм и сделать то же самое для каждого из них.frame и все кадры в этих кадрах (вложенные кадры, которые должны быть бесконечно вложенными, должны быть обнаружены и добавлены к вашей ссылке на объект для использования) - ссылка на frame также необходима для надежного определения завершения загрузки, проверка readystate или .busy безумно ненадежна, ваш код сломаетсяпочти наверняка большую часть времени.Ознакомьтесь с некоторыми из моих сообщений, связанных с ВБ, чтобы узнать больше, или это: Ограничения контроля веб-браузера

Кроме того, если вам нужна дополнительная помощь, дайте мне знать, я могу дать вам подсказки о методах обнаружениязагрузка завершена.

...