工作中很多時候經(jīng)常需要網(wǎng)抓數(shù)據(jù)或者把數(shù)據(jù)填寫到網(wǎng)站上,使用Selenium將其自動化是一種不錯的選擇。Selenium其實是一個用于Web應用程序測試的工具,測試你的應用程序看是否能夠很好地工作在不同瀏覽器和操作系統(tǒng)之上。它可直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。 1、在NuGet中下載Selenium.Chrome.WebDriver(v2.45.0)和Selenium.WebDriver(v3.141.0),然后引用using OpenQA.Selenium;和using OpenQA.Selenium.Chrome; 2、聲明和實例一個ChromeDriver對象 IWebDriver driver = new ChromeDriver(System.AppDomain.CurrentDomain.BaseDirectory.ToString());
ChromeDriver總共有8個構造方法,這里我使用的是第4個方法。 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)指定了命令的等待執(zhí)行時間、ChromeDriver(string chromeDriverDirectory,ChromeOptions options,TimeSpan commandTimeOut) ChromeOptions參數(shù)設置可參考https:///experiments/chromium-command-line-switches/和https://sites.google.com/a/chromium.org/chromedriver/capabilities,常用的有下面幾個: --user-agent=“” 設置請求頭的User-Agent --window-size=1366,768 設置瀏覽器窗口大小 --headless 無界面運行 --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參數(shù)比較少用,可以參考https://ask.csdn.net/questions/758189,常用來設置命令行窗口不彈出: var cdSvc = ChromeDriverService.CreateDefaultService(); cdSvc.HideCommandPromptWindow = true; IWebDriver driver = new ChromeDriver(cdSvc); 但是使用了ChromeDriverService參數(shù)就不能指定ChromeDriver的目錄路徑了,很憂傷。 3、打開網(wǎng)址和設置元素查找時間限制 driver.Navigate().GoToUrl("http://dcga。。。"); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20); 4、獲取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")); 5、其他一些可能使用的語句 driver.Manage().Window.Maximize();//窗口最大化 System.Threading.Thread.Sleep(1000);//等待1秒 ReadOnlyCollection<string> windows = driver.WindowHandles; driver.SwitchTo().Window(windows[1]);//有新窗口彈出時切換
|
|
來自: 黃金屋1 > 《Selenium》