■ ChromeDriver 클래스의 ExecuteScript 메소드를 사용해 페이지 하단의 특정 엘리먼트까지 화면을 스크롤시키고 해당 엘리먼트의 이미지를 캡처하는 방법을 보여준다.
▶ Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Threading; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; namespace TestProject { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { ChromeDriverService driverService = ChromeDriverService.CreateDefaultService(); driverService.HideCommandPromptWindow = true; ChromeOptions options = new ChromeOptions(); options.AddArgument("--start-maximized"); ChromeDriver driver = new ChromeDriver(driverService, options); INavigation navigation = driver.Navigate(); navigation.GoToUrl("https://www.daum.net/"); WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(d => (d as IJavaScriptExecutor).ExecuteScript("return document.readyState").Equals("complete")); Thread.Sleep(1000); IWebElement element = driver.FindElement(By.XPath("//*[@id=\"daumFoot\"]/div/a[1]/img")); driver.ExecuteScript("arguments[0].scrollIntoView(true);", element); object offsetYObject = driver.ExecuteScript("return window.pageYOffset;"); int offsetY = (int)float.Parse(offsetYObject.ToString()); ITakesScreenshot takesScreenshot = driver as ITakesScreenshot; Screenshot screenshot = takesScreenshot.GetScreenshot(); Rectangle elementRectangle = new Rectangle ( element.Location.X, element.Location.Y - offsetY, element.Size.Width, element.Size.Height ); Bitmap screenshotBitmap = new Bitmap(new MemoryStream(screenshot.AsByteArray)); screenshotBitmap = screenshotBitmap.Clone(elementRectangle, screenshotBitmap.PixelFormat); screenshotBitmap.Save("d:\\target.png", ImageFormat.Png); screenshotBitmap.Dispose(); Console.WriteLine("크롬 브라우저를 종료하려면 아무 키나 눌러주시기 바랍니다."); Console.ReadKey(false); driver.Quit(); } #endregion } } |