本次主要學習關於selenium元素定位,瀏覽器的控制等方面的知識,須要必定的HTML基礎,瞭解了HTML基礎後,更能好的瞭解元素定位的方式css
selenium提供了18中元素定位的方式,在這裏揀經常使用的8種方式進行學習,還有一些元素操做,瀏覽器的操做,鼠標操做,切換頁面,切換表單等操做html
# selenium之元素定位 from selenium import webdriver import time driver = webdriver.Chrome() driver.get("http://www.baidu.com") # 1.id定位(以打開百度定位到輸入框爲例) driver.find_elements_by_id("kw")# id具備惟一性 # 2.name定位 driver.find_element_by_name("wd")# name屬性能夠不惟一,定位時須要確認注意 # 3.class 定位 driver.find_element_by_class_name("s_ipt")# class屬性也能夠不惟一,定位時須要注意 # 4.tag標籤訂位 driver.find_element_by_tag_name("input")# 單個標籤法案爲太廣,通常不用這種方法 # 5.link 文本標籤 driver.find_element_by_link_text("新聞") # 經過元素標籤訂的文本信息進行定位 # 6.取部分文本標籤進行定位 driver.find_element_by_partial_link_text("新")# 經過取元素標籤的部分文本信息進行定位 # 7.xpath 定位 # (1).絕對路徑進行定位,經過標籤的層級關係找到元素的絕對路徑 driver.find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input") # (2).利用元素的屬性進行定位 '//'表示當前目錄下,'*'表明當前目錄下全部標籤, # [@id='kw']表示這個元素的id屬性值爲kw,元素屬性能夠惟一標記一個元素,均可以用這種方法定位 driver.find_element_by_xpath("//*[@id='kw']") driver.find_element_by_xpath("//*[@class='s_ipt']") # (3).層級與屬性結合 driver.ffind_element_by_xpath("//span[@class='bgs_bth']/input") # (4).經過邏輯運算符 經過邏輯運算符鏈接多個屬性查找元素 driver.find_element_by_xpath("//input[@id='kw' and @class='su']/span/input") # 8.css定位 css經過選擇器爲頁面上的元素綁定屬性,選擇器知識能夠經過HTML基礎瞭解 # (1).class 選擇器 driver.find_element_by_css_selector(".s_ipt") # '.'表示經過class屬性定位元素 # (2)id屬性定位 driver.find_element_by_css_selector("#kw") # '#'表示經過id屬性定位 # (3).經過標籤名進行定位,通常不單獨使用,推薦嵌套使用 # 1).經過父子關係定位 driver.find_element_by_css_selector("span>input") # 2).經過任意屬性定位,只要能夠惟一的標記元素 driver.find_element_by_css_selector("[name=kw]") driver.find_element_by_css_selector("[type=submit]") # 3).組合定位,利用屬性與層級關係進行定位 driver.find_element_by_css_selector("form.fm>span>input.s_ipt") driver.find_element_by_css_selector("form#form>span>input#kw") # 控制瀏覽器操做 # 1.控制瀏覽器彈窗的大小 driver.set_window_size(480,800)#以規定的大小打開瀏覽器 driver.maximize_window()#不傳參數,以全屏的方式打開瀏覽器 # 2.控制瀏覽器的前進,後退,刷新等操做 driver.back()#網頁後退 driver.forward()#網頁前進 driver.refresh()#網頁刷新 # 簡單的元素操做 # 1.send_keys() 模擬鍵盤給輸入框內輸入值 driver.find_element_by_css_selector("#kw").send_keys("hello") time.sleep(2) # 2.clear() 對輸入框內的文本進行清除 driver.find_element_by_css_selector("#kw").clear() # 3.click() 模擬鼠標進行單擊 driver.find_element_by_css_selector("#su").click() driver.find_element_by_css_selector("#su").submit() # 上述點擊的例子能夠用submit,submit方法用於提交表單,相似與「回車」操做,經常與click混用,但沒有click應用範圍廣 # 經常使用鼠標操做 # 鼠標交互的方式包括:右擊,雙擊,懸停,鼠標拖動等功能,在webdriver中,這些方法都封裝在ActionChains類中; from selenium.webdriver.common.action_chains import ActionChains # 1.context_click() 右擊 right_click = driver.find_element_by_css_selector("xx") ActionChains(driver).context_click(right_click).perform() # 首先定位到要單機的元素:right_click, # 調用ActionChains類,將瀏覽器驅動driver做爲參數傳入 # context_click模擬鼠標右擊,調用時須要指定元素(right_click) # perform(),執行全部ActionChains中存儲行爲,能夠理解爲對整個操做的提交動做 # 2.move_to_element() 鼠標懸停 above = driver.find_element_by_css_selector("xx")# 定位到元素 ActionChains(driver).move_to_element(above).perform()# 對元素進行懸停操做 # 3.double_click 雙擊 double_click = driver.find_element_by_css_selector("xx") ActionChains(driver).double_click(double_click).perform() # 4.drag_and_drop(source,target) 鼠標拖放 source = driver.find_element_by_css_selector("xx")# 定位到元素的原位置 target = driver.find_element_by_css_selector("xx")# 定位到元素的目標位置 s2 = driver.find_element_by_css_selector("xx") t2 = driver.find_element_by_css_selector("xx") ActionChains(driver).drag_and_drop(source,target).perform() ActionChains(driver).drag_and_drop(source,target).drag_and_drop(s2,t2).perform()#多個圖片拖拽 # 多窗口切換 # 1.獲取指針所在窗口 print(driver.current_window_handle) # 2.獲取到全部tag頁面,以列表的形式返回 handles = driver.window_handles # 3.取列表的元素,切換至元素所表明的頁面 driver.switch_to_window(handles[-1]) # 多表單切換 # 1.當頁面有多個表單頁面組合而成的時候,就須要進行表單的切換才能定位到相應的元素 driver.get("xx")# 打開一個多表單網頁 driver.switch_to_frame("xx")# 過元素定位到該表單(默認取id,name),而後切換至該表單 driver.switch_to.parent_frame()# 跳出當前一級菜單 driver.switch_to.default_content()# 跳到最外面的頁面