Selenium概述
Selenium是一款開源的Web自動化框架,模擬用戶操作瀏覽器的行為,主要用于界面自動化、瀏覽器兼容性測驗,
優點:
1、跨平臺,如:Windows、Linux 和 Mac等;
2、支持各種瀏覽器,如:Chrome、Firefox、Edge、IE、Opear等;
3、完全開源,
webdriver:
將瀏覽器原生的API封裝成WebDriver API ,作為編程語言與瀏覽器通信的橋梁,從而達到操作瀏覽器的目的,

注:不同的瀏覽器,需要不同的webdriver,且webdriver的版本號與瀏覽器版本號需對應,
Selenium操作瀏覽器
1.啟動瀏覽器
導包:
from selenium import webdriver
1)直接指定driver的路徑
本文以Chrome瀏覽器為例
driver = webdriver.Chrome(executable_path="driver路徑")
2)設定driver的環境變數
將webdriver放置路徑添加環境變數:
環境變數添加步驟:桌面—>我的電腦—>屬性—>高級系統設定—>環境變數—>系統變數找到path并選中—>點擊編輯—>新建—>保存,如下步驟:



推薦:一般直接將對應瀏覽器版本的driver檔案放置在在python的安裝目錄下,省去再次添加環境變數(本人常用方法),
設定環境變數后,可不用再次指定driver路徑:
driver = webdriver.Chrome()
2.打開網頁url
driver.get("http://xxxx")
3.瀏覽器其它控制
driver.maximize_window() # 瀏覽器最大化
driver.minimize_window() # 瀏覽器最小化
driver.set_window_size(1980,1080) # 指定瀏覽器大小
4.無界面操作
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 設定無界面
driver=webdriver.Chrome(chrome_options=options)
5.關閉瀏覽器:
close():關閉當前當前瀏覽器視窗
quit():關閉所有頁面,即關閉瀏覽器
6、其它操作
前進:driver.forward()
后退:driver.back()
重繪:driver.refresh()
元素定位
1.常規定位方法
driver.find_element_by_id()
driver.find_element_by_name()
driver.find_element_by_css_selector()
driver.find_element_by_tag_name()
driver.find_element_by_class_name()
driver.find_element_by_xpath()
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text():模糊查詢
注:查找多個元素:將上述定位方法中的element改為elements即可,如:driver.find_elements_by_name(),唯一屬性id除外
2.xpath的定位方法
**絕對路徑:**以“/”表示,從HTML標簽逐層向下尋找,如:/html/body/table/tbody/tr[2]/td[2]/div/div[2]/table[2]/thead/tr/th[1]
**相對路徑:**以“//”表示,表示任意位置,依據給出的路徑匹配節點
如://*[@id=“fileID”]
常用函式定位法:
使用contains方法,如:xpath=//input[contains(@id,‘abcd’)]
使用text()方法,如:xpath=//button[text()=‘保存’]
使用starts-with方法(同理還有:ends-with),多用于元素屬性部分發生變化的情況,如:
# 如:id=abcd12312sdfsf342
xpath=//input[starts-with(@id,'abcd')]
一個元素需要通過多個屬性值定位,可以用“and”,如:
//span[@id="fileID" and @class='classname']
3.css定位
常用的包含以下幾種:
類選擇:find_element_by_css_selector(".slg")
id選擇:find_element_by_css_selector("#su")
標簽選擇:find_element_by_css_selector(“input”)
屬性選擇:find_element_by_css_selector("[name=‘kw’]")
層級關系:
find_element_by_css_selector(“span>input”)
find_element_by_css_selector(“form>input:nth-child(2)”) #查找form標簽下第2個input元素
組合選擇:find_element_by_css_selector(“form.fm>span>input.slg”)
其它方式:
find_element_by_css_selector("[class*=swait_lg]"),查找class屬性包含“swait_lg”
find_element_by_css_selector("[class^=bba]"),以“bba”開頭
find_element_by_css_selector("[class$=abb]"),以“abb”結尾
…
元素操作
點擊:click()
清除原有內容:clear()
輸入值:send_keys()
獲取內容:text
獲取元素屬性:get_attribute()
判斷元素是否顯示:is_displayed()
焦點轉換
1、轉移到彈窗:
ele = driver.switch_to.alert
ele.accept() # 接受
ele.text # 獲取彈窗內容
ele.dismiss() # 退出或取消
2、頁內焦點切換: driver.switch_to.frame(frame)
退出當前焦點視窗到原視窗:driver.switch_to.default_content()
3、多視窗切換:
driver.switch_to.window(name)
handles=driver.window_handles()
driver.switch_to.window(handles[-1])
等待
selenium有3種等待方式:
1、強制等待
time.sleep(2)
2、顯示等待(區域,針對某個元素)
WebdriverWait(driver,5,0.5).until(lambda driver:driver.find_element_by_xpath())
3、隱式等待(全域,可解決大部分的元素等待問題)
driver.implicitly_wait(20)
截圖
1.截取整個網頁:
driver.get_screenshot_as_base64() # 保存的是base64的編碼格式
driver.save_screenshot('XX/XX.png') # 如果在alert之類的彈出對話框出現后截圖,程式會拋出例外
driver.get_screenshot_as_png() # 保存的是二進制資料,需要寫成圖片檔案保存
driver.get_screenshot_as_file('XX/XX.png') # 獲取當前window的截圖,截圖成功回傳True,出現IOError的時候回傳False
2.截小圖:
ele.screenshot()
ele = driver.find_element_by_id('msg')
ele.screenshot('./3.png')
滑鼠鍵盤操作
常用工具:Actionchains、pymouse、pykeyboard、pyautogui
1.Actionchains常用滑鼠操作:
單機:click()
雙擊:double_click()
移動到某個元素上:move_to_element
在某個元素上懸停:click_and_hold
將一個元素拖到另一個元素上:drag_and_drop
用法:
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).context_click(driver.find_element_by_id('su')).perform()
注:滑鼠的所有事件,必須使用perform()執行所有ActionChains中存盤的行為
2.鍵盤操作:
from selenium.webdriver.common.keys import Keys
send_keys(Keys.ENTER) # 鍵盤的回車事件
send_keys(Keys.BACKSPACE) # 洗掉,回退
# 組合使用
send_keys(Keys.CONTROL,'a') # 全選
send_keys(Keys.CONTROL,'c') # 復制
呼叫JS方法
用法:driver.execute_script(js代碼)
修改只讀屬性,如:driver.execute_script('document.getElementById(\'su\').readOnly=0;')
移動到頁面底部
driver.excute_script("window.scrollTo(0,document.body.scrollHeight)")
注:本文是本人作業中學習及使用到的selenium常用方法,如有錯誤之處歡迎指出
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298643.html
標籤:其他
