> 文章列表 > C#使用WebDriver模拟浏览器操作WEB页面

C#使用WebDriver模拟浏览器操作WEB页面

C#使用WebDriver模拟浏览器操作WEB页面

有时候需要模拟访问页面触发某个功能,可以使用WebDriver来实现这一功能,驱动打开浏览器,并对页面重定向以及对页面写入脚本等操作。

安装Selenium.Chrome,Selenium.Support.UI,Selenium

引入

using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;

  /// <summary>
        /// 获得WebDriver
        /// </summary>
        /// <returns></returns>
        private IWebDriver GetDriver()
        {
            try
            {
                
                if (driver == null || driver.WindowHandles.Count == 0)
                {
                    driver = new ChromeDriver();
                }
            }
            catch (Exception ex) {
                if(driver!=null)
                driver.Dispose();
                 driver = new ChromeDriver();
                WriteLogHelper.WriteLogsAsync($"重启driver:{ex.ToString()}","重启web模拟");
            }
            return driver;
        }

   private void button5_Click(object sender, EventArgs e)
        {
            var url = textBox1.Text;
            if (string.IsNullOrEmpty(url) == false)
            {
                driver = GetDriver();
                // 打开目标URL
                driver.Navigate().GoToUrl(url);
                WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
                try
                {
                    wait.Until((d) =>
                    {
                        var element = driver.FindElement(By.Id("printResult"));
                        var result = element.Text;
                        return string.IsNullOrEmpty(result)==false;
                    });
                    var element = driver.FindElement(By.Id("printResult"));
                    var result =  element.Text;
                }
                catch (Exception ex) {
                    if (driver != null){
                        driver.Dispose();
                        driver = null;
                    }
                }
            }
        }

通过driver.Navigate().GoToUrl(url);  打开制定URL,

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));

wait.Until((d) =>
                    {
                        var element = driver.FindElement(By.Id("printResult"));
                        var result = element.Text;
                        return string.IsNullOrEmpty(result)==false;
                    });
                    var element = driver.FindElement(By.Id("printResult"));
                    var result =  element.Text;

通过 WebDriverWait 可以设定页面满足一定条件后进行页面操作,比如某个元素保护指定值,以及还可以执行脚本

IJavaScriptExecutor jsExecutor = driver as IJavaScriptExecutor; 

jsExecutor.ExecuteScript("$(document).trigger({type: 'keydown', which: 87, keyCode: 87})");