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})");