Python Selenium 常用方法
歡迎加入學習交流QQ群:657341423
在python中,自動化操作web,有selenium和splinter,後者主要根據前者進行一個封裝,功能沒有前者強大,但比較容易掌握上手,如果對於沒有基礎新手而言,可以學習後者再學前者。先說說Selenium的一些具體用法吧:
一、開啟瀏覽器
driver的部署,呼叫瀏覽器需要用到瀏覽器的driver。
driver放置位置具有爭議。有的說是在chrome 下執行指令碼,需要將chromedriver.exe 放在chrome瀏覽器安裝目錄下
在ie 下執行指令碼,需要將IEDriverServer.exe 放在ie瀏覽器安裝目錄下
還有火狐的geckodriver.exe
而我的driver放置是直接放置在python的安裝目錄下的,也是可以直接執行。
1,谷歌
from selenium import webdriver
driver=webdriver.Chrome() #呼叫chrome瀏覽器
driver.get('https://www.baidu.com')
print driver.title
driver.quit()
2、火狐
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://seleniumhq.org/')
3、IE
driver=webdriver.Ie() #呼叫ie瀏覽器
二、瀏覽器常用功能
driver.maximize_window()#瀏覽器最大化
driver.set_window_size(480, 800)#設定瀏覽器寬480、高800顯示
driver.back()#瀏覽器後退
driver.forward()#瀏覽器前進
driver.quit()#關閉瀏覽器
driver.title#獲取瀏覽器標題
driver.current_url #獲取當前瀏覽器視窗網址
三、物件定位
find_element_by_id()
find_element_by_name()
#id和name定位有侷限性,如果沒有這些屬性的就無法用這個定位
find_element_by_class_name()
find_element_by_tag_name()
#class_name和tag_name,在網頁中會出現多次的情況。
find_element_by_link_text()
find_element_by_partial_link_text()
#文字連結,partial_link用於模糊匹配。
find_element_by_xpath()
find_element_by_css_selector()
這兩種最常用,而且精準。
find_elements_by_XX和find_element_by_XX有明顯區別,前者是複數。find_elements是不能直接點選的,它是複數的
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
四、操作元素
操作元素的方法有下面幾個:
clear 清除元素的內容,如果可以的話
send_keys 在元素上模擬按鍵輸入
click 單擊元素
submit 提交表單
driver.find_element_by_id("user_pwd").clear()
#用於清除輸入框的預設內容
driver.find_element_by_id("user_pwd").send_keys("password")
#用於在一個輸入框裡輸入xx 內容
driver.find_element_by_id("dl_an_submit").click()
#用於單擊一個按鈕
driver.find_element_by_id("dl_an_submit").submit()
#提交表單
#可看到可以使用submit()方法來代替click()對輸入的資訊進行提交,在有些情
況下兩個方法可以相互使用;submit()要求提交物件是一個表單,更強調對資訊的提交。click()更強調
事件的獨立性
text=driver.find_element_by_id("cp").text
獲取元素的text
location = driver.find_element_by_xpath("//div[@id='u1']/a[3]").location
print (location)
#座標: {'y': 19, 'x': 498}
attribute=driver.find_element_by_id("kw").get_attribute('type')
#返回元素的屬性值,可以是id、name、type 或元素擁有的其它任意屬性
result=driver.find_element_by_id("kw").is_displayed()
#返回元素的結果是否可見,返回結果為True 或False
result=driver.find_element_by_id("kw").is_selected
#返回元素的結果是否已選,用於checkbox和radio,返回結果為True 或False
更多方法可以參考:
Python\Lib\site-packages\selenium\webdriver\remote\webdriver.py
五、ActionChains 類滑鼠操作的常用方法:
context_click() 右擊
double_click() 雙擊
drag_and_drop() 拖動
move_to_element() 滑鼠懸停在一個元素上
click_and_hold() 按下滑鼠左鍵在一個元素上
注意click()與上述滑鼠操作方法是不同的,兩者不屬於同一個類。
#引入ActionChains 類
from selenium.webdriver.common.action_chains import ActionChains
#定位到要右擊的元素
right =driver.find_element_by_xpath("xx")
#對定位到的元素執行滑鼠右鍵操作
ActionChains(driver).context_click(right).perform()
#driver:瀏覽器驅動 driver 作為引數傳入
#context_click:滑鼠操作方法
#right:需要操作元素
六、鍵盤事件
#引入Keys 類包
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
#輸入框輸入內容
driver.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)
#刪除多輸入的一個m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
time.sleep(3)
#輸入空格鍵+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys(u"教程")
time.sleep(3)
#ctrl+a 全選輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')
time.sleep(3)
#ctrl+x 剪下輸入框內容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')
time.sleep(3)
#輸入框重新輸入內容,搜尋
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'v')
time.sleep(3)
#通過Enter鍵盤來代替點選操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
time.sleep(3)
driver.quit()
經常使用到的鍵盤操作:
send_keys(Keys.BACK_SPACE) 刪除鍵(BackSpace)
send_keys(Keys.SPACE) 空格鍵(Space)
send_keys(Keys.TAB) 製表鍵(Tab)
send_keys(Keys.ESCAPE) 回退鍵(Esc)
send_keys(Keys.ENTER) Enter鍵(Enter)
send_keys(Keys.CONTROL,‘a’) 全選(Ctrl+A)
send_keys(Keys.CONTROL,‘c’) 複製(Ctrl+C)
send_keys(Keys.CONTROL,‘x’) 剪下(Ctrl+X)
send_keys(Keys.CONTROL,‘v’) 貼上(Ctrl+V)
更多方法可以參看:
Python\Lib\site-packages\selenium\webdriver\common\keys.py檔案
七、設定等待時間
implicitly_wait():是webdirver 提供的一個超時等待。隱的等待一個元素被發現,或一個命令完成。
如果超出了設定時間的則丟擲異常。
WebDriverWait():同樣也是webdirver 提供的方法。在設定時間內,預設每隔一段時間檢測一次當前
頁面元素是否存在,如果超過設定時間檢測不到則丟擲異常。
implicitly_wait() 隱形等待
implicitly_wait()方法比sleep() 更加智慧,後者只能選擇一個固定的時間的等待,前者可以在一個時間範圍內智慧的等待。
WebDriverWait() 顯示等待
詳細格式如下:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver - WebDriver 的驅動程式(Ie, Firefox, Chrome 或遠端)
timeout - 最長超時時間,預設以秒為單位
poll_frequency - 休眠時間的間隔(步長)時間,預設為0.5 秒
ignored_exceptions - 超時後的異常資訊,預設情況下拋NoSuchElementException 異常。
具體說明:http://blog.csdn.net/huilan_same/article/details/52544521
八、定位一組物件
通常ID,classname,tag定位會生成一組元素的,如果用這種方法,而且想定位某一個元素,只能用迴圈這組元素,然後通過get_attribute判斷。
# 選擇頁面上所有的tag name 為input 的元素
inputs = driver.find_elements_by_tag_name('input')
#然後從中過濾出tpye 為checkbox 的元素,單擊勾選
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
二次定位:
driver.find_element_by_id(‘xx’).find_element_by_link_text(‘xx’).click()
九、定位frame 中的物件
driver.switch_to.frame(0) # 1.用frame的index來定位,第一個是0
# driver.switch_to.frame("frame1") # 2.用id來定位
# driver.switch_to.frame("myframe") # 3.用name來定位
#driver.switch_to.frame(driver.find_element_by_tag_name("iframe")) # 4.用WebElement物件來定位
從frame中切回主文件(switch_to.default_content())
driver.switch_to.default_content()
如果frame裡面巢狀frame,一層層切進去
driver.switch_to.frame(“frame1”)
driver.switch_to.frame(“frame2”)
從frame2再切回frame1,這裡selenium給我們提供了一個方法能夠從子frame切回到父frame,而不用我們切回主文件再切進來。
driver.switch_to.parent_frame() # 如果當前已是主文件,則無效果
十、瀏覽器多視窗
#獲得當前視窗
nowhandle=driver.current_window_handle
#獲取全部視窗
allhandles=driver.window_handles
#獲取第二個視窗
driver.window_handles[1]
#切換第二個視窗
driver.switch_to_window(driver.window_handles[1])
#關閉視窗
driver.close()
也可以通過迴圈全部視窗allhandles,然後通過判斷title去切換視窗
十一、alert/confirm/prompt 處理
處理JavaScript 所生成的alert、confirm 以及prompt 是很簡單的。具體思路是使用
switch_to.alert()方法定位到alert/confirm/prompt。然後使用text/accept/dismiss/send_keys 按需進行操做。
text 返回alert/confirm/prompt 中的文字資訊。
accept 點選確認按鈕。
dismiss 點選取消按鈕,如果有的話。
send_keys 輸入值,這個alert\confirm 沒有對話方塊就不能用了,不然會報錯。
#獲取網頁上的警告資訊
alert=driver.switch_to_alert()
#接收警告資訊
alert.accept()
dirver.quit()
#接受警告資訊
alert = driver.switch_to_alert()
alert.accept()
#得到文字資訊並列印
alert = driver.switch_to_alert()
print alert.text()
#取消對話方塊(如果有的話)
alert = driver.switch_to_alert()
alert.dismiss()
#輸入值(如果有的話)
alert = driver.switch_to_alert()
alert.send_keys(“xxx”)
十二、下拉框處理
#先定位到下拉框
m=driver.find_element_by_id("ShippingMethod")
#再點選下拉框下的選項
m.find_element_by_xpath("//option[@value='10.69']").click()
也有些下拉框是滑鼠移上去直接彈出的,那麼我們可以使用move_to_element()進行操作。
radio和checkbox直接通過find_element方式定位點選即可。
十三、上存檔案
只要定位上傳按鈕,通send_keys 新增
本地檔案路徑就可以了。絕對路徑和相對路徑都可以,關鍵是上傳的檔案存在
<div class="row-fluid">
<div class="span6 well">
<h3>upload_file</h3>
<input type="file" name="file" />
</div>
</div>
driver.find_element_by_name(“file”).send_keys(‘D:\file.txt’)
下載檔案
from selenium import webdriver
from time import sleep
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'd:\\'}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(executable_path='E:\\Python\\chromedriver.exe', chrome_options=options)
driver.get('https://pypi.python.org/pypi/dodo_commands/0.5.1')
driver.find_element_by_xpath('//a[@class="button green"]').click()
sleep(3)
driver.quit()
executable_path:為chromedriver.exe路徑。
download.default_directory:檔案儲存路徑。
十四、執行js 一般有兩種場景:
一種是在頁面上直接執行JS
另一種是在某個已經定位的元素上執行JS
execute_script(script, *args)
在當前視窗/框架同步執行javaScript
script:JavaScript 的執行。
*args:適用任何JavaScript 指令碼。
頁面滾動條
#將頁面滾動條拖到底部
js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)
time.sleep(3)
#將滾動條移動到頁面的頂部
js_="var q=document.documentElement.scrollTop=0"
driver.execute_script(js_)
time.sleep(3)
十五、Cookie處理
webdriver 操作cookie 的方法有:
get_cookies() 獲得所有cookie 資訊
get_cookie(name) 返回特定name 有cookie 資訊
add_cookie(cookie_dict) 新增cookie,必須有name 和value 值
delete_cookie(name) 刪除特定(部分)的cookie 資訊
delete_all_cookies() 刪除所有cookie 資訊
通過向瀏覽器中新增cookie 可以繞過登入的驗證碼,這是比較有意思的一種解決方案。我們可以在
使用者登入之前,通過add_cookie()方法將使用者名稱密碼寫入瀏覽器cookie ,再次訪問系統登入連結將自
動登入。例如下面的方式:
....
#訪問xxxx 網站
driver.get("http://www.xxxx.cn/")
#將使用者名稱密碼寫入瀏覽器cookie
driver.add_cookie({'name':'Login_UserNumber', 'value':'username'})
driver.add_cookie({'name':'Login_Passwd', 'value':'password'})
#再次訪問xxxx 網站,將會自動登入
driver.get("http://www.xxxx.cn/")
time.sleep(3)
....
driver.quit()
使用cookie 進行登入最大的難點是如何獲得使用者名稱密碼的name ,如果找到不到name 的名字,就沒
辦法向value 中輸使用者名稱、密碼資訊。
筆者的建議是可以通過get_cookies()方法來獲取登入的所有的cookie 資訊,從而進行找到使用者名稱、
密碼的name 物件的名字
相關文章
- python中selenium常用的api方法PythonAPI
- Selenium用法詳解 -- Selenium3 常用方法
- python+selenium方法大全Python
- Python Selenium操作Cookie的方法PythonCookie
- Selenium系列教程- 04常用的元素定位方法
- Selenium+Java自動化測試常用的方法Java
- python常用內建方法Python
- Selenium,Selenium使用方法(三)
- Selenium,Selenium使用方法(二)
- Selenium,Selenium使用方法(一)
- selenium常用元素定位方式
- Python字串常用方法總結Python字串
- Python之selenium:selenium庫的簡介、安裝、使用方法之詳細攻略Python
- python selenium DemoPython
- selenium+python設定爬蟲代理IP的方法Python爬蟲
- python+selenium實現動態爬取及selenuim的常用操作PythonUI
- python中file物件的常用方法Python物件
- Python | Python常用函式、方法示例總結(API)Python函式API
- Selenium系列教程-06 圖片上傳以及Web Element常用操作方法Web
- Selenium switch_to方法
- Selenium ActionChains、TouchAction方法AI
- 【Python】selenium 基礎使用:頁面元素定位方法彙總Python
- 【python+selenium的web自動化】- 元素的常用操作詳解(一)PythonWeb
- Python Selenium簡介Python
- Python之Selenium 框架Python框架
- Python 中 selenium 庫Python
- Python列表中新增元素的常用方法!Python
- Python中保留整數常用的方法!Python
- Python Selenium等待(waits)頁面載入完成的三種方法PythonAI
- Selenium Web元素定位方法Web
- Python Selenium如何操作CookiesPythonCookie
- python selenium 速查筆記Python筆記
- Python教程: 反射及常用的幾種方法Python反射
- Python字串是什麼?常用方法有哪些?Python字串
- Python讀寫EXCEL檔案常用方法大全PythonExcel
- Python學習筆記 String型別常用方法Python筆記型別
- Python中判斷字典的值常用的方法!Python
- Python中判斷字母大小寫常用的方法!Python
- Python計算1到n的和常用方法!Python