Selenium WebDriver
阿新 • • 發佈:2020-09-06
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)