介紹:javascript
Selenium 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操做同樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。css
利用它能夠驅動瀏覽器執行特定的動做,如點擊、下拉等操做,同時還能夠獲取瀏覽器當前呈現的頁面的源代碼 ,作到可見便可爬。 html
因此Selenium如今被普遍用於Python爬蟲。查了下資料,發現這個工具確實強大,最重要的是,C#也是能夠調用的。java
官方支持Java,C#,Python,Ruby,PHP,Perl,Javascript等語言jquery
Selenium使用Java開發,項目地址 https://github.com/SeleniumHQ/seleniumgit
使用Selenium:github
一、咱們新建一個C#控制檯程序windows
二、使用Nuget搜索如下依賴庫瀏覽器
須要引用的核心庫是Selenium.RC,Selenium.Support,Selenium.WebDriveride
而後再須要引用 瀏覽器驅動庫,這裏我以IE瀏覽器爲例,Chrome使用方式跟IE是同樣的,程序包名稱爲Selenium.WebDriver.ChromeDriver。
三、在Main函數中輸入如下代碼
1 static void Main(string[] args) 2 { 3 using (IWebDriver driver = new OpenQA.Selenium.IE.InternetExplorerDriver()) 4 { 5 driver.Navigate().GoToUrl("http://www.baidu.com"); //driver.Url = "http://www.baidu.com"是同樣的 6 7 var source = driver.PageSource; 8 9 Console.WriteLine(source); 10 } 11 }
運行,會彈出IE瀏覽器,網頁加載完成後,瀏覽器會自動關閉。控制檯輸入結果以下
這樣咱們就能夠輕鬆的獲取動態渲染頁面的源碼。
基本用法:
這裏我以https://technet-info.com/Main.aspx這個頁面來演示。
頁面源碼以下
1 <!DOCTYPE html> 2 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="description" content="Wandering the number of windows, stayed in the number of hotels, will feel that separation is not wronged, the feelings are used to browse or used to collect, so that the day had a memorable day" /><title> 5 Welcome To Technet-Info : Personal Gallery 6 </title><link rel="shortcut icon" type="image/x-icon" href="technet.ico" media="screen" /><link rel="stylesheet" href="Css/MainCss.css" /><link rel="stylesheet" href="Css/screen.css" /> 7 <style> 8 #footer{ 9 display: flex; 10 justify-content: center; 11 align-items: center; 12 position: fixed; 13 bottom: 0; 14 left: 0; 15 width: 100%; 16 } 17 </style> 18 <script type="text/javascript" src="js/jquery.js"></script> 19 <script type="text/javascript" src="js/easySlider1.7.js"></script> 20 <script type="text/javascript"> 21 $(document).ready(function () { 22 $("#slider").easySlider({ 23 auto: true, 24 pause:3000, 25 continuous: true, 26 numeric: true 27 }); 28 }); 29 </script> 30 </head> 31 <body> 32 <form method="post" action="./Main.aspx" id="form1"> 33 <div class="aspNetHidden"> 34 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTQyNjI2MTkwNmRkt331eyucv2SBluj0E2d+0haGV4exFHWtGQkZhNBnpHE=" /> 35 </div> 36 37 <div class="aspNetHidden"> 38 39 <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="202EA31B" /> 40 </div> 41 <div id="main"> 42 <div id="header"> 43 <div class="musicarea"> 44 45 <iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=150 height=52 src="http://music.163.com/outchain/player?type=0&id=516657278&auto=1&height=32"></iframe> 46 </div> 47 <div class="content"> 48 49 <div class="logo"> 50 51 <div class="logo_img"> 52 <div class="logo_img"></div> 53 </div> 54 55 <div class="logo_txt"> 56 <div style="height: 50px;"> 57 <p></p> 58 </div> 59 <div style="height: 50px;"> 60 <p>個人freetime</p> 61 </div> 62 </div> 63 </div> 64 65 66 67 <div class="menu"> 68 69 </div> 70 </div> 71 72 <div id="content"> 73 74 75 </div> 76 77 <div id="cards"> 78 79 </div> 80 <div id="pin"> 81 82 </div> 83 84 </div> 85 86 <div id="footer"> 87 <div id="copyright"> 88 <p style="margin: 3px"> 89 <a href="http://www.miitbeian.gov.cn/">湘ICP備16012349號</a> 90 <span>|</span> 91 <span>Copyright © 2016, www.technet-info.com, All rights reserved.</span> 92 </p> 93 <p><a href="mailto:zhaotianff@163.com">Email:zhaotianff@163.com</a></p> 94 </div> 95 </div> 96 </div> 97 </form> 98 </body> 99 </html>
經過id獲取元素
1 //by id 2 var byID = driver.FindElement(By.Id("cards"));
經過類名獲取元素
1 //by class name 2 var byClassName = driver.FindElements(By.ClassName("menu"));
經過標籤名獲取元素
1 //by tag name 2 var byTagName = driver.FindElement(By.TagName("iframe"));
經過名字獲取元素
1 var byName = driver.FindElement(By.Name("__VIEWSTATE"));
經過連接文本獲取元素
1 //by linked text 2 //<a href="http://www.google.com">linkedtext</a>> 3 var byLinkText = driver.FindElement(By.LinkText("linkedtext"));
經過部分連接文本獲取元素
1 //by partial link text 2 //<a href="http://www.google.com">linkedtext</a>> 3 var byPartialLinkText = driver.FindElement(By.PartialLinkText("text"));
經過CSS選擇器獲取元素
1 //by css 2 var byCss = driver.FindElement(By.CssSelector("#header .content .logo"));
經過XPath來獲取元素(XPath使用能夠參考上一篇博客)
1 //by xpath 2 var byXPath = driver.FindElements(By.XPath("//div"));
執行JS
1 //execute javascript 2 var jsReturnValue = (IWebElement)((IJavaScriptExecutor)driver).ExecuteScript("jsfunname");
獲取元素的值和屬性
1 //get element value and attribute value 2 var byIDText = byID.Text; 3 var byIDAttributeText = byID.GetAttribute("id");
模擬鼠標點擊元素
1 //click 2 driver.FindElement(By.Id("copyright")).Click();
頁面導航
1 //Navigation 2 driver.Navigate().Forward(); 3 driver.Navigate().Back();
拖拽操做(能夠實現滑動驗證碼的驗證)
1 //Drag And Drop 2 var element = driver.FindElement(By.Name("source")); 3 IWebElement target = driver.FindElement(By.Name("target")); 4 (new Actions(driver)).DragAndDrop(element, target).Perform();