selenium初識(二)——之webdriver API

  配置完的環境以後,咱們先來寫一個小腳本:css

# __Author__:"Jim_xie"
from selenium import webdriver
from time import sleep

#打開瀏覽器
driver = webdriver.Chrome()
#以get方法打開指定瀏覽器
driver.get('http://music.163.com')      #注意URL以HTTP開頭
#等待3秒
sleep(3)
#關閉瀏覽器
driver.close()

注:建議在開始selenium+python學習以前,學習些python語言的基礎知識,能夠參考菜鳥教程html

  這是最基本的腳本,實現調用內置瀏覽器驅動,執行打開瀏覽器——打開指定URL——關閉瀏覽器的過程。python

那麼怎麼去執行這個腳本呢?web

有如下幾個方法:
1.直接在經常使用的python IDE中直接執行,可是會出現關於驅動的報錯:
windows

  這是驅動未配置到環境變量報錯,可是有的時候會出現一些未知的報錯,就像上面的同樣,其實筆者已經將api

相關的瀏覽器驅動都已經配置在環境變量中,仍然出現此報錯。這個報錯,若是各位有解決方案,請在評論中瀏覽器

告知。cookie

2.雖然第一個方法會出錯,但仍是有其餘方法執行的,首先提供第一種方法:經過cmd系統執行。ide

a.進入到該腳本目錄下;學習

b.python small_script.py執行


 

3.另一個方法,其實也是跟2比較相似:

a.打開python IDLE(能夠從【開始】的安裝程序中查找)

b.File——New File——Open File——而後從建立small_script.py的目錄中選中它

c.Run——run module或者按F5

 

  知曉了最基本的編寫和執行以後,下面咱們進入正題:webdriver API(官方API)

webdriver屬於selenium體系中設計出來操做瀏覽器的一套API。

提點小建議:在Firefox和Chrome這兩個瀏覽器中,xpath定義更準確地是Firefox。也就是說,可使用Firefox定位

元素,自動化瀏覽器可使用其餘幾種瀏覽器。

1.元素定位:

 1 # __Author__:"Jim_xie"
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.by import By
 5 
 6 #打開瀏覽器
 7 driver = webdriver.Chrome()
 8 #打開指定URL
 9 driver.get('http://music.163.com')
10 #定位元素,指定URL下有惟一的id a
11 ele1 = driver.find_element_by_id('a')
12 ele01 = driver.find_element(By.ID,'a')
13 
14 #定位元素,指定URL下有惟一的name b
15 ele2 = driver.find_element_by_name('b')
16 ele02 = driver.find_element(By.NAME,'b')
17 
18 # 定位元素,指定URL下有惟一的class name c
19 ele3 = driver.find_element_by_class_name('c')
20 ele03 = driver.find_element(By.CLASS_NAME,'c')
21 
22 #定位元素,指定URL下有惟一的連接名稱 d
23 ele4 = driver.find_element_by_link_text('d')
24 ele04 = driver.find_element(By.LINK_TEXT,'d')
25 
26 #定位元素,指定URL下有惟一的連接名稱包含 e
27 ele5 = driver.find_element_by_partial_link_text('e')
28 ele05 = driver.find_element(By.PARTIAL_LINK_TEXT,'e')
29 
30 #定位元素,指定URL下有惟一的css selector f
31 ele6 = driver.find_element_by_css_selector('f')
32 ele06 = driver.find_element(By.CSS_SELECTOR,'f')
33 
34 #定位元素,指定URL下有惟一的xpath 能夠經過F12選擇頁面上的元素而後在代碼中點擊複製,選擇xpath複製便可
35 ele7 = driver.find_element_by_xpath('g')
36 ele07 = driver.find_element(By.XPATH,'g')
37 
38 #定位元素,指定URL下有惟一的tag_name h
39 ele8 = driver.find_element_by_tag_name('h')
40 ele08 = driver.find_element(By.TAG_NAME,'h')
41 
42 #定位元素組,指定URL下有多個tag name h
43 elem8 = driver.find_elements(By.TAG_NAME,'h')
44 elem08 = driver.find_elements_by_tag_name('h')
45 
46 '''其餘元素組定位方式能夠參考以上元素組定位方式'''
View Code

 2. 控制瀏覽器

 1 # __Author__:"Jim_xie"
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.by import By
 5 
 6 #打開瀏覽器
 7 driver = webdriver.Chrome()
 8 #打開指定URL
 9 driver.get('http://music.163.com')
10 
11 #獲取瀏覽器窗口尺寸,以字典造成輸出{'width': XXX,'height':XXX}
12 a = driver.get_window_size()
13 print(a)
14 
15 #控制瀏覽器最大化
16 driver.maximize_window()
17 
18 driver.get('http://www.cnr.cn')
19 
20 #控制瀏覽器返回上一頁面
21 driver.back()
22 
23 #控制瀏覽器前進一頁面
24 driver.forward()
25 
26 #控制瀏覽器刷新頁面
27 driver.refresh()
28 
29 #獲取瀏覽器位置,以字典的形式輸出{'x‘:XX,'y':XX}
30 b = driver.get_window_position()
31 print(b)
32 
33 #關閉瀏覽器,只是關閉此標籤頁
34 driver.close()
35 
36 #關閉相關瀏覽器,完全關瀏覽器,關閉全部標籤頁
37 driver.quit()
View Code

3.簡單元素操做

 1 # __Author__:"Jim_xie"
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.by import By
 5 
 6 #打開瀏覽器
 7 driver = webdriver.Firefox()
 8 #打開指定URL
 9 driver.get('http://music.163.com')
10 driver.implicitly_wait(3)
11 #定位登陸按鈕
12 login_button = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/a')
13 #點擊登陸按鈕
14 login_button.click()
15 
16 driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div/div[1]/div[2]/a').click()
17 
18 #定位用戶名輸入框
19 username = driver.find_element_by_id('p')
20 #清除用戶名欄內容
21 username.clear()
22 #在用戶名框內輸入手機號
23 username.send_keys('13333333333')
24 #獲取框的屬性
25 a = username.get_attribute('type')
26 #獲取框的大小     輸出框的尺寸,字典格式{'height':XXX,'width':XXX}
27 a1 = username.size
28 #定位登陸按鈕
29 submit_botton = driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div[1]/div[5]/a')
30 #提取按鈕尺寸
31 b = submit_botton.__sizeof__()
32 #獲取按鈕的文字內容
33 c  = submit_botton.text
34 #判斷元素是否展現,返回 True 或False
35 d = submit_botton.is_displayed()
36 print(a,a1,b,c,d)
37 
38 driver.quit()
View Code

4. 鼠標事件

須要導入模塊:from selenium.webdriver.common.action_chains import ActionChains

 1 # __Author__:"Jim_xie"
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.by import By
 5 from time import sleep
 6 from selenium.webdriver.common.action_chains import ActionChains
 7 
 8 #打開瀏覽器
 9 driver = webdriver.Firefox()
10 #打開指定URL
11 driver.get('http://www.jkslw.cn')
12 #隱性等待
13 driver.implicitly_wait(3)
14 #定位註冊按鈕
15 registry_button = driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/p/a[2]')
16 #單擊註冊按鈕
17 registry_button.click()
18 driver.implicitly_wait(3)
19 #定位logo元素
20 logo = driver.find_element_by_xpath('/html/body/div[1]/div/a')
21 #雙擊logo
22 ActionChains(driver).double_click(logo).perform()
23 sleep(2)
24 print(driver.title)
25 
26 driver.get('http://music.163.com')
27 ele = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[1]/a')
28 #右擊元素
29 ActionChains(driver).context_click(ele).perform()
30 print(driver.title)
View Code

在執行過程當中,發現右擊的效果不明顯,用得比較多的仍是雙擊和點擊

5.鍵盤事件

須要導入模塊: from selenium.webdriver.common.keys import Keys

 1 # __Author__:"Jim_xie"
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.keys import Keys
 5 
 6 driver = webdriver.Firefox()
 7 driver.get('http://www.baidu.com')
 8 
 9 ele = driver.find_element_by_xpath('//*[@id="kw"]')
10 #Keys.ENTER = 外接鍵盤按ENTER鍵
11 ele.send_keys('selenium',Keys.ENTER)
12 
13 print(driver.title)
View Code
1 from selenium.webdriver.common.keys import Keys
2 from selenium import webdriver
3 
4 ...
5 ele.send_keys(Keys.BACK_SPACE)      #刪除鍵
6 ele.send_keys(Keys.ALT)                     #ALT鍵
7 ele.send_keys(Keys.CONTROL,'a')        #Ctrl +A
View Code

6.獲取驗證信息

 1 # __Author__:"Jim_xie"
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.keys import Keys
 5 
 6 driver = webdriver.Firefox()
 7 driver.get('http://www.baidu.com')
 8 
 9 ele = driver.find_element_by_xpath('//*[@id="kw"]')
10 #Keys.ENTER = 外接鍵盤按ENTER鍵
11 ele.send_keys('selenium',Keys.ENTER)
12 
13 #頁面標題
14 title = driver.title
15 print(title)
16 
17 driver.back()
18 #當前URL
19 url = driver.current_url
20 print(url)
21 
22 driver.quit()
View Code

7.設置元素等待

a.顯性等待

 1 # __Author__:"Jim_xie"
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.by import By
 5 from selenium.webdriver.support.ui import WebDriverWait
 6 from selenium.webdriver.support import expected_conditions as EC
 7 from selenium.webdriver.common.keys import Keys
 8 from time import sleep
 9 
10 driver = webdriver.Firefox()
11 driver.get('http://www.baidu.com')
12 #WebDriver(driver,等待總時長,每N秒檢查一次).直到某種情況爲真
13 ele = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
14 ele.send_keys('你好',Keys.ENTER)
15 sleep(2)
16 print(driver.title)
17 driver.quit()
View Code

b.隱性等待,若是在定義的等待時間T內,接下來須要定位的元素或者頁面沒有出,就會拋出NoSuchElementException異常。

driver.implicitly_wait(等待時間T)

實際等待時間,小於等於T秒

c.time.sleep(等待時間F)

實際等待時間=等待時間F

8.Iframe多表單嵌套

遇到iframe多表單嵌套的時候切換表單頁面操做:

driver.switch_to.iframe(#iframe id 或者 name)        #切換到表單內
driver.switch_to.parent_iframe(#iframe id或name)    #切換到上級表單
driver.switch_to.default_content()        #跳出最外層頁面

9.多窗口切換

driver.window_handles    #獲取全部窗口句柄
driver.current_window_handle    #獲取當前窗口句柄
driver.switch_to.window(窗口句柄)    #切換到相應的窗口

10.警告框處理

JavaScript生成的警告框分爲alert、confirm和prompt三種類型

python 2.7
driver.switch_to_alert().accept()        #模擬點擊確認,接受
driver.switch_to_alert().text            #獲取警告的文本內容
driver.swtitch_to_alert().dismiss()    #解散現有警告框
driver.swtich_to_alert().send_keys(須要發送的文本)        #向警告框中發送文本

python 3X
from selenium.webdriver.common.alter import Alert
Alter(driver).accept()
Alter(driver).text
Alter(driver).dismiss()
Alter(driver).senf_keys("須要發送的文本")

 

具體參考博客1

11.上傳文件

若是是這種情況:

HTML代碼中該上傳位置爲input標籤的話可使用實現上傳目的

driver.find_element_by_xpath('XXXX').send_keys(文件絕對位置)

另一種方法是使用Autolt輔助實現上傳,由於比較複雜,不在這裏贅述了

12.操做cookie

driver.get_cookies()        #獲取全部cookie
driver.get_cookie(name)    #獲取字典的key爲name的cookie信息
driver.add_cookie(cookie_dict)    #添加字典形式的cookie
driver.delete_cookie(name,optionString)    #刪除cookie信息 name是要刪除的cookie名稱,optionString是該cookie的選項
driver.delete_all-cookies()        #刪除全部的cookie

13.滾動條操做

js = "windows.scrollTo(左邊距離,上邊距離);"    #別忘記";"
driver.excute_script(js)        #實現瀏覽窗口的滾動條移動

14.截屏

driver.get_screenshot_as_file("保存的位置\文件名.擴展名")    #截屏保存

  基本的API操做就上面這14種,若有疑義歡迎評論區指導,謝謝!

相關文章
相關標籤/搜索