欧美亚洲综合图区在线|天天射天天干国产成卜|99久久免费国产精精品|国产的欧美一区二区三区|日韩中文字幕无码不卡专区|亚麻成人aV极品一区二区|国产成人AV区一区二区三|成人免费一区二区三区视频网站

當前位置:首頁 > 軟件開放 > 正文內容

網(wǎng)頁自動下拉代碼(網(wǎng)頁制作下拉菜單)

軟件開放7個月前 (06-26)421

概述

Selenium是一款免費的分布式的自動化測試工具,支持多種開發(fā)語言,無論是C、 java、ruby、python、或是C# ,你都可以通過selenium完成自動化測試。本文以一個簡單的小例子,簡述C# 利用Selenium進行瀏覽器的模擬操作,僅供學習分享使用,如有不足之處,還請指正。

涉及知識點

要實現(xiàn)本例的功能,除了要掌握Html ,Java,CSS等基礎知識,還涉及以下知識點:

log4net:主要用于日志的記錄和存儲,本例采用log4net進行日志記錄,便于過程跟蹤和問題排查,關于log4net的配置和介紹,之前已有說明,本文不做贅述。

Queue:隊列,先進先出模式,本文主要用于將日志信息保存于隊列中,然后再顯示到頁面上,其中Enqueue用于添加內容到結尾處,Dequeue用于返回并移除一個位置的對象。

IWebDriver:瀏覽器驅動接口,所有的關于瀏覽器的操作都可以通過此接口進行,不同瀏覽器有不同的實現(xiàn)類,如:IE瀏覽器(InternetExplorerDriver)Chrome瀏覽器(ChromeDriver)等。

BackgroundWorker:后臺工作線程,區(qū)別于主線程,通過事件觸發(fā)不同的狀態(tài)。

本例開發(fā)工具為VS2019,通過NuGet進行需要的軟件包的安裝與管理,如下所示:

示例效果圖

本例采用Chrome瀏覽器,用于監(jiān)控某一個網(wǎng)站并獲取相應內容,如下所示:

展開全文

Selenium示例介紹

定義一個webDriver,如下所示:

網(wǎng)頁自動下拉代碼(網(wǎng)頁制作下拉菜單)

通過ID獲取元素并填充內容和觸發(fā)事件,如下所示:

通過XPath獲取元素,如下所示:

核心代碼

主要的核心代碼,就是瀏覽器的元素定位查找和事件觸發(fā),如下所示:

namespaceAiSmoking.Core{publicclassSmoking{///summary///是否正在運行 ////summaryprivateboolrunning = false;

///summary///驅動 ////summaryprivateIWebDriver driver = null;

///summary///# 無貨 ////summaryprivatestringno_stock = "Currently Out of Stock";

///summary///# 線程等待秒數(shù) ////summaryprivateintwait_sec = 2;

privateDictionary string, string cfg_info;

privatestringwork_path = string.Empty;

///summary///構造函數(shù) ////summarypublicSmoking( ) {

}

///summary///帶參構造函數(shù) ////summary///param name="cfg_info"/param///param name="work_path"/parampublicSmoking( Dictionary string, string cfg_info, stringwork_path ) {this.cfg_info = cfg_info; this.work_path = work_path; this.wait_sec = int.Parse(cfg_info[ "wait_sec"]); //# 如果小于2,則等于2this.wait_sec = ( this.wait_sec 2? 2: this.wait_sec); this.wait_sec = this.wait_sec * 1000; }

///summary///開始跑 ////summarypublicvoidstartRun( ) {//"""運行起來"""try{this.running = true; stringurl = this.cfg_info[ "url"]; stringusername = this.cfg_info[ "username"]; stringpassword = this.cfg_info[ "password"]; stringitem_id = this.cfg_info[ "item_id"]; if( string.IsNullOrEmpty(url) || string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(item_id)) {LogHelper.put( "配置信息不全,請檢查config.cfg文件是否為空,然后再重啟"); return; }if( this.driver == null) {stringexplorer = this.cfg_info[ "explorer"]; if(explorer == "Chrome") {//谷歌瀏覽器ChromeOptions options = newChromeOptions; this.driver = newChromeDriver(options); }else{//默認IEvaroptions = newInternetExplorerOptions; //options.AddAdditionalCapability.('encoding=UTF-8')//options.add_argument('Accept= text / css, * / *')//options.add_argument('Accept - Language= zh - Hans - CN, zh - Hans;q = 0.5')//options.add_argument('Accept - Encoding= gzip, deflate')//options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko')//# 2. 定義瀏覽器驅動對象this.driver = newInternetExplorerDriver(options); }}this.run(url, username, password, item_id); }catch(Exception e) {LogHelper.put( "運行過程中出錯,請重新打開再試"+e.StackTrace); }}

///summary///運行 ////summary///param name="url"/param///param name="username"/param///param name="password"/param///param name="item_id"/paramprivatevoidrun( stringurl, stringusername, stringpassword, stringitem_id ) {//"""運行起來"""http://# 3. 訪問網(wǎng)站this.driver.Navigate.GoToUrl(url); //# 4. 最大化窗口this.driver.Manage.Window.Maximize; if( this.checkIsExists(By.LinkText( "賬戶登錄"))) {//# 判斷是否登錄:未登錄this.login(username, password); }if( this.checkIsExists(By.PartialLinkText( "歡迎回來"))) {//# 判斷是否登錄:已登錄LogHelper.put( "登錄成功,下一步開始工作了"); this.working(item_id); }else{LogHelper.put( "登錄失敗,請設置賬號密碼"); }}

///summary///停止運行 ////summarypublicvoidstopRun( ) {//"""停止"""try{this.running = false; //# 如果驅動不為空,則關閉//self.close_browser_nicely(self.__driver)if( this.driver != null) {this.driver.Quit; //# 關閉后切要為None,否則啟動報錯this.driver = null; }}catch(Exception e) {//print('Stop Failure')}finally{this.driver = null; }}

privatevoidlogin( stringusername, stringpassword ) {//# 5. 點擊鏈接跳轉到登錄頁面this.driver.FindElement(By.LinkText( "賬戶登錄")).Click; //# 6. 輸入賬號密碼//# 判斷是否加載完成if( this.checkIsExists(By.Id( "email"))) {this.driver.FindElement(By.Id( "email")).SendKeys(username); this.driver.FindElement(By.Id( "password")).SendKeys(password); //# 7. 點擊登錄按鈕this.driver.FindElement(By.Id( "sign-in")).Click; }}

///summary///工作狀態(tài) ////summary///param name="item_id"/paramprivatevoidworking( stringitem_id ) {while( this.running) {try{//# 正常獲取信息if( this.checkIsExists(By.Id( "string"))) {this.driver.FindElement(By.Id( "string")).Clear; this.driver.FindElement(By.Id( "string")).SendKeys(item_id); this.driver.FindElement(By.Id( "string")).SendKeys(Keys.Enter); }//# 判斷是否查詢到商品stringxpath = "http://div[@class=\"specialty-header search\"]/div[@class=\"specialty-deion\"]/div[@class=\"gt-450\"]/span[2] "; if( this.checkIsExists(By.XPath(xpath))) {intcount = int.Parse( this.driver.FindElement(By.XPath(xpath)).Text); if(count 1) {Thread.Sleep( this.wait_sec); LogHelper.put( "沒有查詢到item id ="+ item_id + "對應的信息"); continue; }}else{Thread.Sleep( this.wait_sec); LogHelper.put( "沒有查詢到item id2 ="+ item_id + "對應的信息"); continue; }//# 判斷當前庫存是否有貨

stringxpath1 = "http://div[@class=\"product-list\"]/div[@class=\"product\"]/div[@class=\"price-and-detail\"]/div[@class=\"price\"]/span[@class=\"noStock\"]"; if( this.checkIsExists(By.XPath(xpath1))) {stringtxt = this.driver.FindElement(By.XPath(xpath1)).Text; if(txt == this.no_stock) {//# 當前無貨Thread.Sleep( this.wait_sec); LogHelper.put( "查詢一次"+ item_id + ",無貨"); continue; }}//# 鏈接path1stringxpath2 = "http://div[@class=\"product-list\"]/div[@class=\"product\"]/div[@class=\"imgDiv\"]/a"; //# 判斷是否加載完畢//# this.waiting((By.CLASS_NAME, "imgDiv"))if( this.checkIsExists(By.XPath(xpath2))) {this.driver.FindElement(By.XPath(xpath2)).Click; Thread.Sleep( this.wait_sec); //# 加入購物車if( this.checkIsExists(By.ClassName( "add-to-cart"))) {this.driver.FindElement(By.ClassName( "add-to-cart")).Click; LogHelper.put( "加入購物車成功,商品item-id:"+ item_id); break; }else{LogHelper.put( "未找到加入購物車按鈕"); }}else{LogHelper.put( "沒有查詢到,可能是商品編碼不對,或者已下架"); }Thread.Sleep( this.wait_sec); }catch(Exception e) {Thread.Sleep( this.wait_sec); LogHelper.put(e);}}}

///summary///判斷是否存在 ////summary///param name="by"/param///returns/returnsprivateboolcheckIsExists( By by) {try{inti = 0; while( this.running i 3) {if( this.driver.FindElements( by).Count 0) {break; }else{Thread.Sleep( this.wait_sec); i = i + 1; }}returnthis.driver.FindElements( by).Count 0; }catch(Exception e) {LogHelper.put(e);returnfalse; }}

}}

關于日志幫助類,代碼如下:

備注

行路難·其一

【作者】李白 【朝代】唐

金樽清酒斗十千,玉盤珍羞直萬錢。

停杯投箸不能食,拔劍四顧心茫然。

欲渡黃河冰塞川,將登太行雪滿山。

閑來垂釣碧溪上,忽復乘舟夢日邊。

行路難,行路難,多歧路,今安在?

長風破浪會有時,直掛云帆濟滄海。

作者:Alan.hsiang

出處:http://www.cnblogs.com/hsiang/

版權聲明:本文來源于網(wǎng)友收集或網(wǎng)友供稿,僅供學習交流之用,如果有侵權,請轉告小編或者留言,本公眾號立即刪除。

支持小薇

福利 :

關注公眾號: DotNet開發(fā)跳槽 ?

覺得不錯,請點個在看 呀

掃描二維碼推送至手機訪問。

版權聲明:本文由飛速云SEO網(wǎng)絡優(yōu)化推廣發(fā)布,如需轉載請注明出處。

本文鏈接:http://www.landcheck.net/post/117481.html

分享給朋友:

“網(wǎng)頁自動下拉代碼(網(wǎng)頁制作下拉菜單)” 的相關文章

牡丹江軟件開發(fā)(牡丹江軟件工程師招聘)

牡丹江軟件開發(fā)(牡丹江軟件工程師招聘)

今天給各位分享牡丹江軟件開發(fā)的知識,其中也會對牡丹江軟件工程師招聘進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧!本文目錄一覽: 1、牡丹江宏博軟件開發(fā)有限公司怎么樣? 2、牡丹江哪有教軟件開發(fā)Java的培訓班 3、牡丹江藍崎軟件開發(fā)有限責任公司怎么樣? 牡丹江宏博軟...

開源軟件開發(fā)平臺(開發(fā)軟件開發(fā)平臺)

開源軟件開發(fā)平臺(開發(fā)軟件開發(fā)平臺)

今天給各位分享開源軟件開發(fā)平臺的知識,其中也會對開發(fā)軟件開發(fā)平臺進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧!本文目錄一覽: 1、軟件開發(fā)平臺都有哪些?具體都有哪幾種呢? 2、java web開發(fā)平臺有哪些? 3、軟件開發(fā)平臺有哪些? 4、開源的快速開發(fā)平臺有哪些...

蘇州軟件開發(fā)兼職(蘇州軟件招聘)

蘇州軟件開發(fā)兼職(蘇州軟件招聘)

今天給各位分享蘇州軟件開發(fā)兼職的知識,其中也會對蘇州軟件招聘進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧!本文目錄一覽: 1、蘇州有什么靠譜勞務? 2、蘇州肯德基兼職工資待遇? 3、蘇州兼職 4、蘇州找工作,找兼職去哪里? 5、蘇州園區(qū)有什么工資可日結的兼職工...

半夜打撲克軟件app免費下載(免費打撲克的軟件)

半夜打撲克軟件app免費下載(免費打撲克的軟件)

今天給各位分享半夜打撲克軟件app免費下載的知識,其中也會對免費打撲克的軟件進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧!本文目錄一覽: 1、這如何下載打撲克視頻 2、哪個平臺直播打撲克 3、23張撲克游戲下載app 4、撲克王app在哪里下載 5、兩個人可以...

怎么創(chuàng)建網(wǎng)站(怎么建網(wǎng)站)

怎么創(chuàng)建網(wǎng)站(怎么建網(wǎng)站)

本篇文章給大家談談怎么創(chuàng)建網(wǎng)站,以及怎么建網(wǎng)站對應的知識點,希望對各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、如何創(chuàng)建自己的網(wǎng)站平臺 2、怎樣自己創(chuàng)建一個網(wǎng)站? 3、怎么創(chuàng)建網(wǎng)站 4、怎么建網(wǎng)站呀! 5、怎么創(chuàng)建一個自己的網(wǎng)站 如何創(chuàng)建自己的網(wǎng)站平臺 創(chuàng)建自己的網(wǎng)站平臺...

eclipse默認工作空間路徑設置(eclipse配置構建路徑)

eclipse默認工作空間路徑設置(eclipse配置構建路徑)

今天給各位分享eclipse默認工作空間路徑設置的知識,其中也會對eclipse配置構建路徑進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧!本文目錄一覽: 1、如何修改eclipse默認的工作空間路徑及字體顯示 2、怎么修改Eclipse默認打開路徑 3、eclipse...