包名:selenium
支援瀏覽器:Firefox,InternetExplorerDriver,OperaDriver,Chrome(要使用一種瀏覽器應下載相應的driver驅動)
firefox: https://github.com/mozilla/geckodriver/releases
chrome: http://chromedriver.storage.googleapis.com/index.html
IE: http://selenium-release.storage.googleapis.com/index.html
一、基本命令
1 dr = selenium.webdriver.Firefox() 開啟瀏覽器; 2 dr.maximize_window() 最大化 3 dr.set_window_size(400,640) 設定瀏覽器大小; 4 dr.get("url") 開啟網頁; 5 dr.back() 後退; 6 dr.forward() 前進; 7 dr.current_url 獲取當前url; 8 dr.current_window_handle 獲得當前視窗; 9 dr.window_handles 獲得所有視窗; 10 switch_to_window() 在多視窗之間切換; 11 dr.execute_script() 執行js指令碼; 12 dr.quit() 退出瀏覽器;
二、元素定位
1 dr.find_element_by_id() 2 dr.find_element_by_name() 3 dr.find_element_by_class_name() 4 dr.find_element_by_tag_name() 5 dr.find_element_by_link_text() 6 dr.find_element_by_partial_link_text() 7 dr.find_element_by_xpath()
路徑示例:"/html/body/div[2]/form/span/input"
通過id查詢:"//input[@id=’input’]" 還可以用and,or進行多個屬性聯合查詢,每個前都需@
能過上一級目錄定位:"//span[@id=’input-container’]/input"
dr.find_element_by_css_selector()
三、css元素匹配規則
1 * 通過元素選擇器,匹配任何元素; 2 E 標籤選擇器,匹配所有使用E標籤的元素; 3 .info class選擇器,匹配所有class屬性中包含info的元素; 4 #footer id選擇器,匹配所有id屬性等於footer的元素; 5 E,F 多元素選擇器,同時匹配所有E或F元素; 6 E F 後代元素選擇器,匹配所有屬於E元素後代的F元素; 7 E>F 子元素選擇器,匹配所有E元素的子元素F 8 E+F 毗鄰元素選擇器,匹配緊隨E元素之後的同級元素F(只匹配第一個) 9 E~F 同級元素選擇器,匹配所有在E元素之後的同級F元素; 10 E[att='val'] 屬性att值為val的E元素; 11 E[att^='val'] 屬性att值以val開頭的E元素; 12 E[att$='val'] 屬性att值以val結尾的E元素; 13 E[att*='val'] 屬性att值包含val的E元素; 14 E[att1='v1'][att2='v2'] att1和att2的同時定位; 15 E:contains('xxxx')內容中包含xxxx的E元素; 16 E:not(s) 匹配不符合當前選擇器的任何元素;
18 E:nth(n) 在其父元素中的E子元素集合中排在第n+1個E元素(例:css=ul>li:nth(0)) 19 E:eq(n) 同上; 20 E:first 第一個; 21 E:last 最後一個; 22 E:even 偶數位元素; 23 E:odd 奇數位元素; 24 E:lt(n) 前n個元素; 25 E:gt(n) 排在n位之後的元素; 26 E:only-child 父元素的唯一一個子元素且標籤為E; 27 E:empty 不包含任何子元素的E元素; 29 find_elements 也可以上各種方法定位元素,主要用於批量操作物件,或者先獲取一組物件,然後再從之中選擇一個。
四、對已定位到元素(WebElement)的操作
1 click() 單擊; 2 send_keys() 輸入;還可傳送模擬鍵盤事件,具體鍵存於selenium.webdriver.common.keys; 3 submit() 提交表單; 4 clear() 清除元素內容;
WebElement的一些屬性:
1 size 尺寸; 2 text 元素文字; 3 get_attribute(name) 返回元素的屬性值,可以是id,name,type或元素擁有的其它屬性; 4 is_displayed() 元素是否使用者可見;
五、滑鼠操作(ActionChains)常用方法
1 context_click() 右擊; 2 double_click() 雙擊; 3 drag_and_drop(source,target) 拖動; 4 move_to_element() 懸停在一個元素上; 5 click_and_hold() 左鍵點選一個元素且不釋放;
例:ActionChains(driver).context_click(element).perform() perform()
六、alert/comfirm/prompt 等彈出框的處理
使用switch_to.alert() 方法定位到相應的框體;
然後使用以下方法執行相應的操作:
1 text 返回文字資訊; 2 accept 確認; 3 dismiss 取消; 4 send_keys 輸入值;
七、cookie處理
1 get_cookies() 獲得所有cookie資訊; 2 get_cookie(name) 返回特定name的cookie資訊; 3 add_cookie(cookie_dict) 新增cookie; 4 delete_cookie(name) 刪除指定cookie 5 delete_all_cookies() 刪除所有cookie資訊;
八、補充內容
常用js指令碼:
1 var q=document.documentElement.scrollTop=0 將滾動條滑到最開始; 2 $("#tooltip").fadeOut(); 隱藏文字資訊; 3 $(arguments[0]).fadeOut() 隱藏按鈕; 4 implicitly_wait() 超時等待; 5 switch_to_frame() 切換主框架;
層級定位:可在一個find_element後再接一個.find_element,通過不同層級的兩個元素來同時確定一個位置。
上傳檔案:
先通過定位開啟本地彈出框,然後通過send_keys來傳入本地檔案路徑就可以了;