工做中不少時候常常須要網抓數據或者把數據填寫到網站上,使用Selenium將其自動化是一種不錯的選擇。Selenium實際上是一個用於Web應用程序測試的工具,測試你的應用程序看是否可以很好地工做在不一樣瀏覽器和操做系統之上。它可直接運行在瀏覽器中,就像真正的用戶在操做同樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。javascript
一、在NuGet中下載Selenium.Chrome.WebDriver(v2.45.0)和Selenium.WebDriver(v3.141.0),而後引用using OpenQA.Selenium;和using OpenQA.Selenium.Chrome;html
二、聲明和實例一個ChromeDriver對象java
IWebDriver driver = new ChromeDriver(System.AppDomain.CurrentDomain.BaseDirectory.ToString());
ChromeDriver總共有8個構造方法,這裏我使用的是第4個方法。chrome
ChromeDriver()、ChromeDriver(ChromeDriverService service)指定初始化ChromeDriver的服務、ChromeDriver(ChromeOptions options)指定ChromeDriver的選項、ChromeDriver(string chromeDriverDirectory)指定ChromeDriver.exe的目錄路徑、ChromeDriver(ChromeDriverService service,ChromeOptions options)、ChromeDriver(string chromeDriverDirectory,ChromeOptions options)、ChromeDriver(ChromeDriverService service,ChromeOptions options,TimeSpan commandTimeOut)指定了命令的等待執行時間、ChromeDriver(string chromeDriverDirectory,ChromeOptions options,TimeSpan commandTimeOut)windows
ChromeOptions參數設置可參考https://peter.sh/experiments/chromium-command-line-switches/和https://sites.google.com/a/chromium.org/chromedriver/capabilities,經常使用的有下面幾個:api
--user-agent=「」 設置請求頭的User-Agent瀏覽器
--window-size=1366,768 設置瀏覽器窗口大小less
--headless 無界面運行ide
--start-maximized 最大化運行工具
--incognito 隱身模式
--disable-javascript 禁用javascript
--disable-infobars 禁用瀏覽器正在被自動化程序控制的提示
var option = new ChromeOptions(); option.AddArgument("--incognito"); option.AddArgument("headless"); option.AddArgument("disable-infobars"); IWebDriver driver = new ChromeDriver(System.AppDomain.CurrentDomain.BaseDirectory.ToString(),option);
ChromeDriverService參數比較少用,能夠參考https://ask.csdn.net/questions/758189,經常使用來設置命令行窗口不彈出:
var cdSvc = ChromeDriverService.CreateDefaultService(); cdSvc.HideCommandPromptWindow = true; IWebDriver driver = new ChromeDriver(cdSvc);
可是使用了ChromeDriverService參數就不能指定ChromeDriver的目錄路徑了,很憂傷。
三、打開網址和設置元素查找時間限制
driver.Navigate().GoToUrl("http://dcga。。。"); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
四、獲取html元素並進行操做
driver.FindElement(By.XPath("//button[@class=\"btn try-out__btn\"]")).Click(); IWebElement tryit; tryit = driver.FindElement(By.XPath("//textarea[@class=\"body-param__text\"]")); tryit.Clear(); tryit.SendKeys("{\"docId\":\"111111111\"}");
若是返回的元素有多個,就得使用collection了,引用using System.Collections.ObjectModel;
ReadOnlyCollection<IWebElement> coll = driver.FindElements(By.XPath("//*[@id=\"operations-default-post_automation_api_va\"]/div/span[2]/a"));
五、其餘一些可能使用的語句
driver.Manage().Window.Maximize();//窗口最大化 System.Threading.Thread.Sleep(1000);//等待1秒 ReadOnlyCollection<string> windows = driver.WindowHandles; driver.SwitchTo().Window(windows[1]);//有新窗口彈出時切換