• ChromeDriver截图


    一、NuGet安装Selenium.Chrome.WebDriver和Selenium.WebDriver

    二、将packagesSelenium.Chrome.WebDriver.2.45driver下的chromedriver.exe文件,复制到程序的bin目录下

    三、截图工具类

    using OpenQA.Selenium;
    using OpenQA.Selenium.Chrome;
    using OpenQA.Selenium.Support.UI;
    using System;
    using System.ComponentModel.Design;
    using System.Drawing;
    using System.IO;
    using System.Threading;
    
    namespace Comon
    {
        public class ScreenshotUtil : IDisposable
        {
            /// <summary>
            ////// </summary>
            private static readonly object LockObject = new object();
    
            private static IWebDriver _webDriver;
    
            public ScreenshotUtil(string url, int windowWidth, int windowHeight)
            {
                if (_webDriver == null)
                {
                    lock (LockObject)
                    {
                        if (_webDriver == null)
                        {
                            ChromeOptions options = new ChromeOptions();
                            options.AddArgument($"--window-size={windowWidth},{windowHeight}");
                            options.AddArgument("start-fullscreen");
                            _webDriver = new ChromeDriver(options);
                        }
                    }
                }
                if (_webDriver.Url != url)
                {
                    _webDriver.Navigate().GoToUrl(url);
                }
            }
    
            public void Dispose()
            {
                _webDriver?.Quit();
                _webDriver = null;
            }
    
            public static void Quit()
            {
                lock (LockObject)
                {
                    _webDriver?.Quit();
                    _webDriver = null;
                }
            }
    
            public void ShotThenSave(string targetFileName, TimeSpan waitTime, Func<IWebDriver, IWebElement> condition)
            {
                if (!File.Exists(targetFileName))
                {
                    lock (LockObject)
                    {
                        if (string.IsNullOrWhiteSpace(targetFileName))
                        {
                            throw new ArgumentNullException(nameof(targetFileName));
                        }
                        if (condition != null)
                        {
                            WebDriverWait webDriverWait = new WebDriverWait(_webDriver, waitTime);
                            webDriverWait.Until(condition);
                        }
    
                        Thread.Sleep(2000);
    
                        ITakesScreenshot screenshotDriver = (ITakesScreenshot)_webDriver;
                        if (screenshotDriver != null)
                        {
                            Screenshot screenshot = screenshotDriver.GetScreenshot();
                            string directoryName = Path.GetDirectoryName(targetFileName);
                            if (directoryName == null)
                            {
                                throw new ArgumentException(nameof(targetFileName));
                            }
                            if (!Directory.Exists(directoryName))
                            {
                                Directory.CreateDirectory(directoryName);
                            }
                            ClearOldImage(directoryName);
    
                            screenshot.SaveAsFile(targetFileName);
                        }
                    }
                }
            }
    
            private static void ClearOldImage(string directoryName)
            {
                DirectoryInfo folder = new DirectoryInfo(directoryName);
                FileInfo[] existFileInfos = folder.GetFiles();
                if (existFileInfos.Length > 1500)
                {
                    foreach (var file in existFileInfos)
                    {
                        if (file.CreationTime < DateTime.Today)
                        {
                            try
                            {
                                file.Delete();
                            }
                            catch (Exception e)
                            {
                                LogUtil.LogException(e);
                            }
    
                        }
                    }
                }
            }
        }
    }
  • 相关阅读:
    返回数组指针的函数形式
    zoj 2676 网络流+01分数规划
    2013 南京理工大学邀请赛B题
    poj 2553 强连通分支与缩点
    poj 2186 强连通分支 和 spfa
    poj 3352 边连通分量
    poj 3177 边连通分量
    poj 2942 点的双连通分量
    poj 2492 并查集
    poj 1523 求割点
  • 原文地址:https://www.cnblogs.com/tangchun/p/10614974.html
Copyright © 2020-2023  润新知