# 導入selenium的webdriver模塊css
from selenium import webdriver
# 打開火狐瀏覽器web
wd = webdriver.Firefox()
# 使用火狐瀏覽器打開網址 瀏覽器
wd.get("http://babyplan.once.wiki/BabyPlan/login.jsp")
# 刷新當前頁面框架
wd.refresh()
# 讓瀏覽器進行後退操做jsp
wd.back()
#讓瀏覽器進行前進操做函數
wd.forward()
設置窗口大小:ui
1.設置瀏覽器的分辨率,第一個參數(666)是設置瀏覽器的寬,第二個參(100)數設置瀏覽器的高度url
wd.set_window_size(666,100)
2.將瀏覽器窗口最大化spa
wd.maximize_window()
# 獲取當前瀏覽器頁面的截圖,而且指定圖片的保存位置插件
wd.get_screenshot_as_file("d:/a.png")
退出:
1.關閉當前正在使用的頁面
wd.close()
2.關閉當前全部經過同一個webdriver打開的頁面
wd.quit()
定位
1.經過id定位,定位到當前網頁上ID爲""的元素,而後將"233"這個值插入進去
wd.find_element_by_id("id").send_keys("233")
2.方法同上,經過name定位
wd.find_element_by_name("")
3.方法同上,經過class定位
wd.find_element_by_class_name("")
#按鈕
使用ID定位到loginbtn後,使用「點擊」操
wd.find_element_by_id("loginbtn").click()
#連接
1. 經過匹配超連接上面的文原本進行定位
wd.find_element_by_link_text("註冊").click()
2.經過匹配超連接上面的文本進行定位,可是這種匹配是模糊的,能夠不將文本補全
wd.find_element_by_partial_link_text("注").click()
#利用插件定位
瀏覽器:Firefox
安裝插件:Firebug和FirePath設置(在菜單欄中的附加組件中)
1.經過使用firepath插件獲取到具體的表達式來實現元素的定位
wd.find_element_by_xpath(".//*[@id='loginForm']/a").click()
2.經過FirePath插件選擇css。經過樣式來定位到具體的元素,這種方法在沒有id 超連接等方式定位時,能夠對元素進行準確的定位(前提是頁面元素的樣式比較豐富)
wd.find_element_by_css_selector(".userReg").click()
等待方法:
1.強制等待:什麼都無論,調用time函數,直接讓程序等待必定時間後在執行下一步操做
import time
time.sleep("等待時長")
2.顯式等待:設置一個等待時長,每隔一段時間就會嘗試執行語句,若是執行語句爲真,則往下運行,若是爲假,則繼續等待,等到等待時長超限制,則拋出異常
WebDriverWait(調用的方法(wd),等待時長,每隔多長時間進行檢查(默認爲0.5秒)).until(要執行的語句)
from selenium.webdriver.support.wait import WebDriverWait
w(wd, 10).until(lambda x: x.find_element_by_link_text(u"註冊").is_displayed())
# 使用顯示等待的方法,判斷註冊按鈕是否存在(displayed:存在),判斷成立後再執行後面的內容,判斷不成立,則等待限制時長後再跑出異常
3.隱式等待: 全局等待時長,設置腳本在網頁加載過程當中的等待時長(當瀏覽器在等待時間內仍然在加載,轉圈圈的狀況下,則等待,加載完成後若是仍在時長範圍內,也會繼續執行下面的語句),超過期長後執行後面的語句
from selenium import webdriver wd = webdriver.Firefox() wd.implicitly_wait(5)
多窗口,多句柄
在平時的操做過程當中,正常都是使用同一個頁面,可是有時候由於點擊了某個連接,會出現一個新的窗口,
那麼這個時候,系統是不知道咱們要操做哪個窗口的
所以咱們須要有一個東西來讓系統知道咱們要操做的內容,就有了句柄這個東西
句柄的話能夠理解成每一個不一樣窗口都是有本身的一個標識符,至關與身份證同樣,在瀏覽器裏面,句柄就是頁面的身份證
# 獲取當前正在操做的頁面(句柄)
wd.current_window_handle
# 獲取當前全部的頁面(句柄)
wd.window_handles
# 切換頁面(句柄)
wd.switch_to_window("句柄值")
# 切換到當前頁面的彈出窗口
wd.switch_to_alert()
# 執行彈出窗口的確認操做
wd.switch_to_alert().accept()
# 取消彈出窗口的確認操做
wd.switch_to_alert().dismiss()
# 定位到ID爲loginForm的表單,而後執行提交操做,這樣就不用再去找提交按鈕了
wd.find_element_by_id("loginForm").submit()
元素操做
簡單操做:
1.點擊(鼠標左鍵)頁面按鈕:click()
2.清空輸入框:clear()
3.輸入字符串:send_keys()
模擬鍵盤操做
# 導入模擬鍵盤模塊
from selenium.webdriver.common.keys import Keys
#模擬鍵盤使用:
send_keys(Keys.要使用的按鍵)
# 定位到ID爲password的元素後,模擬鍵盤進行回車鍵的操做
wd.find_element_by_id("password").send_keys(Keys.ENTER)
模擬鼠標操做
#導入鼠標事件模塊
from selenium.webdriver.common.action_chains import ActionChains
# 將wd對象綁定到鼠標方法
a = ActionChains(wd)
# 將獲取到的元素地址賦值給b
b = wd.find_element_by_link_text("遊戲中心")
# 執行鼠標方法的移動到對象上方,指定要移動的對象,鼠標懸停
a.move_to_element(b)
經常使用鼠標事件:
1.右擊鼠標:context_click()
a.context_click(b)
2.雙擊鼠標:double_click()
a.double_click(b)
頁面裏面包含子頁面的方法(框架)
# 使用switch方法切換到子頁面裏面去,方法參數爲子頁面id,切換完成以後才能對子頁面的內容進行操做
wd.switch_to_fram("top")
# 切換到子頁面裏面後,當前位置就不是在本來頁,所以要操做其餘頁面以前,要先跳出來
wd.switch_to_default_content()
獲取元素屬性
#獲取當前頁面的標題(HTML裏面的title)
wd.title
# 獲取標籤的文本信息
wd.find_element_by_id("user").text
獲取頁面屬性
# 定位到對應元素後,可使用get_attribute獲取到標籤裏面任意屬性的值(只要有)
wd.find_element_by_id("kw").get_attribute("name")
# 獲取當前瀏覽器的名稱
wd.name
# 獲取當前頁面的地址
wd.current_url