Как сделать снимок экрана с помощью Selenium-Chrome («--headless») - PullRequest
1 голос
/ 10 июня 2019

Я создал приложение, используя Selenium. Приложение открывает Chrome и переходит на 3 разных веб-сайта и делает снимок экрана. Все отлично работает. но как только добавляется безголовый аргумент, так что chrome будет запускаться в фоновом режиме, приложение продолжит работу и сохранит первое изображение, но затем, когда оно перейдет на второй веб-сайт, оно выдает системе исключение «недостаточно памяти» в этой строке code ("using (var clone = screenshot.Clone (croppedImage, screenshot.PixelFormat))").

Если бы кто-то мог указать мне, что я должен делать / читать, чтобы решить эту проблему, я был бы очень признателен.

public void TakeScreenshot(IWebDriver driver, IWebElement element, string filename)
        {
            // Scroll to the element if necessary
            var actions = new Actions(driver);
            actions.MoveToElement(element);
            actions.Perform();
            // Get the element position (scroll-aware)
            var locationWhenScrolled = ((RemoteWebElement)element).LocationOnScreenOnceScrolledIntoView;
            var fileName = filename + ".png";
            var byteArray = ((ITakesScreenshot)driver).GetScreenshot().AsByteArray;
            Class_Timer.MyTimer();
            using (var screenshot = new System.Drawing.Bitmap(new System.IO.MemoryStream(byteArray)))
            {
                var location = locationWhenScrolled;
                // Fix location if necessary to avoid OutOfMemory Exception
                if (location.X + element.Size.Width > screenshot.Width)
                {
                    location.X = screenshot.Width - element.Size.Width;
                }
                if (location.Y + element.Size.Height > screenshot.Height)
                {
                    location.Y = screenshot.Height - element.Size.Height;
                }
                Class_Timer.MyTimer();
                // Crop the screenshot
                var croppedImage = new System.Drawing.Rectangle(location.X, location.Y, element.Size.Width, element.Size.Height);
                using (var clone = screenshot.Clone(croppedImage, screenshot.PixelFormat))
                {
                    clone.Save(fileName, ImageFormat.Png);
                    Class_Timer.MyTimer();
                    clone.Dispose(); 

                }
                screenshot.Dispose();
            }

        }
...