1. 程式人生 > 實用技巧 >Selenium WebDriver

Selenium WebDriver

Selenium WebDriver

一、瀏覽器操作方法

from selenium import webdriver
driver = webdriver.Firefox("驅動路徑")
driver.get("http://www.XX.com")

driver.maximize_window()              #最大化
driver.set_window_size(100,100)       #設定瀏覽器大小
driver.set_window_position(300,200)   #設定瀏覽器位置
driver.back()                         #後退
driver.forward()                      #前進
driver.refresh()                      #重新整理
driver.close()                        #關閉當前視窗
driver.quit()                         #關閉所有WebDriver啟動的視窗
driver.title                #獲取頁面title
driver.current_url          #獲取當前頁面url
driver.get_screenshot_as_file(1.jpg)  #截圖

二、選擇器

from selenium import webdriver
driver = webdriver.Firefox("驅動路徑")
driver.get("http://www.XX.com")

driver.find_element_by_id("name")                   #id定位
driver.find_element_by_name("PeriodName")           #name定位
driver.find_element_by_class_name("u-btn-levred")   #class定位
driver.find_element_by_tag_name("input")            #tag定位(標籤)
driver.find_element_by_link_name("text")            #link定位(專門用來定位文字連結)
driver.find_element_by_partial_link_text("text")    #是對link定位的一種補充(可選區部分連線文字#唯一)
driver.find_element_by_xpath("//*[@id="kw"]")       #xpath定位(支援相對路徑,絕對路徑)
driver.find_element_by_css_selector("input")        #css定位(標籤選擇器"input"id選擇器"#id_name"類class選擇器".class_name"屬性選擇器"[type=submit]")層級選擇器(可以多條件定位 空格隔開)

如果選擇出來多個使用find_elements 選擇所有,然後用下標定位,列如 .find_element_by_link_name("text")[0]

xpath與css定位功能都很強大,速度上css更快(但是對我來說速度啥的沒啥用)

拓展(By定位元素)

除find_element_by_***這種方式,還有另一套寫法,也就是統一呼叫find_element()方法,兩個引數,第一個引數是定位的型別,由By提

供;第二個引數是定位的具體值

from selenium import webdriver
from selenium.webdriver.common.by import By     #使用By這種定位前要將By類匯入

driver = webdriver.Firefox("驅動路徑")
driver.get("http://www.XX.com")

driver.find_element(By.ID,"loginName")
driver.find_element(By.NAME,"SubjectName")
driver.find_element(By.CLASS_NAME,"u-btn-levred")
driver.find_element(By.TAG_NAME,"input")
driver.find_element(By.LINK_TEXT,"退出")
driver.find_element(By.PARTIAL_LINK_TEXT,"退")
driver.find_element(By.XPATH,".//*[@id='Title")
driver.find_element(By.CSS_SELECTOR,"[type=submit]")

推薦使用第一種

三、元素操作方法

from selenium import webdriver
driver = webdriver.Firefox("驅動路徑")
driver.get("http://www.XX.com")

element = driver.find_element_by_id("name")
element.click()

element.click()          #點選元素
element.send_keys()      #輸入
element.clear()          #清除文字
element.size                 #返回元素大小
element.text                 #獲取元素的文字
element.get_attribute("id")  #獲取屬性值
element.is_display()         #判斷元素是否可見
element.is_enable()          #判斷元素是否可用

四、滑鼠操作

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Firefox("驅動路徑")
driver.get("http://www.XX.com")
mouse = ActionChains(driver)

element = driver.find_element_by_id("name")
mouse.click(element).perform()    #.perform()執行


mouse.click(on_element=None)                    #單擊滑鼠左鍵
mouse.click_and_hold(on_element=None)           #點選滑鼠左鍵,按住不放
mouse.context_click(on_element=None)              #點選滑鼠右鍵
mouse.double_click(on_element=None)               #雙擊滑鼠左鍵
mouse.drag_and_drop(source, target)               #拖拽到某個元素然後鬆開
mouse.drag_and_drop_by_offset(source, xoffset, yoffset)          #拖拽到某個座標然後鬆開
mouse.move_by_offset(xoffset, yoffset)            #滑鼠移動到距離當前位置(x,y)
mouse.move_to_element(to_element)                 #滑鼠移動到某個元素
mouse.move_to_element_with_offset(to_element, xoffset, yoffset) #將滑鼠移動到距某個元素多少距離的位置
mouse.release(on_element=None)                    #在某個元素位置鬆開滑鼠左鍵
.perform()                                        #執行鏈中的所有動作

五、鍵盤操作

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox("驅動路徑")
driver.get("http://www.XX.com")

element = driver.find_element_by_id("name")
element.send_keys()

element.send_keys(Keys.BACK_SPACE)  #刪除鍵(BackSpace)
element.send_keys(Keys.SPACE)       #空格鍵(Space)
element.send_keys(Keys.TAB)         #製表鍵(Tab)
element.send_keys(Keys.ESCAPE)      #回退鍵(Esc)
element.send_keys(Keys.ENTER)       #回車鍵(Enter)
element.send_keys(Keys.CONTROL,'a') #全選(Ctrl+A)
element.send_keys(Keys.CONTROL,'c') #複製(Ctrl+C)
element.send_keys(Keys.CONTROL,'x') #剪下(Ctrl+X)
element.send_keys(Keys.CONTROL,'v') #貼上(Ctrl+V)
element.send_keys(Keys.F1)          #鍵盤F1

主要為了實現輸入特殊按鍵,和組合鍵

六、元素等待

sleep 強制等待

from time import sleep

sleep(2)    #設定等待2秒鐘

implicitly_wait() 隱性等待

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(20) #設定等待20秒鐘,全域性生效
driver.get('http://www.XX.com')

WebDriverWait()顯示等待

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait    #WebDriverWait注意大小寫
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://www.XX.com')

element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
element.send_keys('123')

七、下拉框

通過select 進行定位下拉框

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome()
driver.get('http://www.XX.com')
element = driver.find_element_by_id("wb") #定位select標籤
select = Select(element)   #實列化

select.select_by_index(1).click()  #通過index進行選擇
select.select_by_value(1).click()  #通過value進行選擇
select.select_by_visile_text("1").click()  #通過選項文字進行選擇

多級定位

element=driver.find_element_by_id("wb")
element.find_element_by_xpath("//option[@value='0']").click()

css直接定位

driver.find_element_by_css_selector("#id > option:nth-child(1)").click() #直接定位

八、彈窗

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.XX.com')
driver.find_element_by_xpath("//input[@onclick='showAlert()']").click() #點選元素彈窗
alert_window = driver.switch_to.alert #切換到彈窗

alert_window.text             #獲取對話窗文字值
alert_window.accept()         #接受彈窗
alert_window.dismiss()        #取消彈窗
alert_window.send_keys()      #輸入值(alert和confirm沒有輸入對話方塊,所以就不用能用了,只能使用在prompt裡)

九、frame

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.XX.com')

element = driver.find_element_by_id("name")  #獲取frame元素

driver.switch_to.frame(element)              #切換frame
driver.switch_to.parent_frame()              #返回到父級
driver.switch_to.default_content()           #返回最外層

十、視窗

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.XX.com')
#獲取視窗控制代碼
current_handle = driver.current_window_handle
all_handle = driver.window_handles
#切換視窗
driver.switch_to.window(all_handles[-1])
driver.switch_to.window(current_handle)

十一、cookie

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.XX.com')

driver.get_cookie(name)        #返回單個名為name的cookie資訊,如果沒有找到,返回none
driver.get_cookies()           #返回當前會話所有的cookie資訊
driver.add_cookie(cookie_dict) #在當前會話中新增cookie資訊
driver.delete_cookie(name)     #刪除單個名為name的cookie資訊
driver.delete_all_cookies()    #在當前會話中刪除所有cookie資訊

十二、JS

driver.execute_async_script(script, args)  #非同步執行JS程式碼,script:被執行的JS程式碼,args:js程式碼中的任意引數
driver.execute_script(script, args)  #同步執行JS程式碼,script:被執行的JS程式碼,args:js程式碼中的任意引數

#舉例:使用js拖動混動條
js = "window.scrollTo(0,10000)"      #(0,100)滾動條位置
driver.execute_script(js)