前言
先來看看Selenium的定義:
Selenium 是一個用於Web應用程式測試的工具。Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試與瀏覽器的相容性——測試你的應用程式看是否能夠很好得工作在不同瀏覽器和作業系統之上。測試系統功能——建立迴歸測試檢驗軟體功能和使用者需求。支援自動錄製動作和自動生成 .Net、Java、Perl等不同語言的測試指令碼。
Selenium安裝
1.PIP安裝:
在pip路徑下輸入下面程式碼:
pip install selenium
複製程式碼
2.通過Pycharm安裝:
Pycharm軟體中輸入:File-->Default Settings
Firefox環境配置
1.網上下載火狐瀏覽器,很簡單,不用多說
2.firefox路徑新增環境變數
找到firefox的路徑,比如C:\Program Files\Mozilla Firefox,找到後新增一下:
**3.下載geckodriver,**下載網址:
https://github.com/mozilla/geckodriver/releases
下載完成後把geckodriver.exe放在firefox的安裝路徑下(不要忘記)
4.在firefox中下載Selenium IDE
然後點選:獲取更多元件,輸入Selenium IDE,下載安裝即可。
5.驗證
可以在命令視窗下輸入:
firefox.exe
複製程式碼
看看是否能正常跳轉到網頁。
再可以在Python編輯器上輸入:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://baidu.com')
複製程式碼
如果成功就正常跳轉了。
Python-selenium各種用法詳解(元素拖拽,頁面切換等)
上面講了selenium的安裝
現在講一下selenium的具體的用法,至於基本的方法大家可以直接檢視selenium API,這裡只寫一部分:
單個元素選取
-
find_element_by_id
-
find_element_by_name
-
find_element_by_xpath
-
find_element_by_link_text
-
find_element_by_partial_link_text
-
find_element_by_tag_name
-
find_element_by_class_name
-
find_element_by_css_selector
多個元素選取
-
find_elements_by_name
-
find_elements_by_xpath
-
find_elements_by_link_text
-
find_elements_by_partial_link_text
-
find_elements_by_tag_name
-
find_elements_by_class_name
-
find_elements_by_css_selector
Selenium具體用法
1.頁面互動
下面我舉例說明,開啟百度瀏覽器,輸入“selenium”,並進行搜尋,列印原始碼,具體程式碼如下:
def pageInteraction():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("Selenium")
# 點選
driver.find_element_by_id('su').click()
try:
# 顯示等待,其中5的解釋:5秒內每隔0.5毫秒掃描1次頁面變化,直到指定的元素
wait = WebDriverWait(driver, 5)
wait.until(lambda driver: driver.find_element_by_id("content_left"))
# 列印原始碼
print(driver.page_source)
except TimeoutException:
print("查詢元素超時")
finally:
driver.close()
複製程式碼
2.頁面元素推拽
需要匯入ActionChains包,url網址來源於網路
def elementDragging():
try:
driver = webdriver.Firefox()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
driver.get(url)
driver.implicitly_wait(5)
# 切換到元素所在的frame
driver.switch_to.frame("iframeResult")
# 起點
start = driver.find_element_by_id("draggable")
# 終點
end = driver.find_element_by_id("droppable")
actions = ActionChains(driver)
actions.drag_and_drop(start, end)
# 執行
actions.perform()
except Exception:
print("exception")
finally:
driver.close()
複製程式碼
3.頁面切換
通過百度搜尋關鍵詞並開啟一個網頁,切換到新的視窗頁面,再開啟第三個頁面
主要用到了下面三個方法:
-
current_window_handl:獲得當前視窗控制程式碼
-
window_handles:返回所有視窗的控制程式碼到當前會話
-
switch_to_window():切換視窗函式
def pageSwitching():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
#獲取當前百度介面的視窗控制程式碼
BD_windows = driver.current_window_handle
#列印
print(BD_windows)
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("CSDN")
# 點選
driver.find_element_by_id('su').click()
try:
#開啟一個網頁
driver.find_element_by_link_text(u'CSDN-專業IT技術社群').click()
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
#列印所有的視窗
print(driver.window_handles)
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
#視窗切換到第二個網頁
driver.switch_to_window(driver.window_handles[1])
#點選第二個網頁的"寫部落格"按鈕
driver.find_element_by_link_text(u'寫部落格').click()
time.sleep(5)
except Exception:
print("exception")
finally:
driver.quit()
複製程式碼
4.彈窗處理
alert = driver.switch_to_alert()
print(alert .text)
alert .accept()
複製程式碼
下面是全部的原始碼:
# coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains
import time
#頁面互動
def pageInteraction():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("Selenium")
# 點選
driver.find_element_by_id('su').click()
try:
# 顯示等待,其中5的解釋:5秒內每隔0.5毫秒掃描1次頁面變化,直到指定的元素
wait = WebDriverWait(driver, 5)
wait.until(lambda driver: driver.find_element_by_id("content_left"))
# 列印原始碼
print(driver.page_source)
except TimeoutException:
print("查詢元素超時")
finally:
time.sleep(3)
driver.close()
#頁面元素拖拽
def elementDragging():
try:
driver = webdriver.Firefox()
url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
driver.get(url)
driver.implicitly_wait(5)
# 切換到元素所在的frame
driver.switch_to.frame("iframeResult")
# 起點
start = driver.find_element_by_id("draggable")
# 終點
end = driver.find_element_by_id("droppable")
actions = ActionChains(driver)
actions.drag_and_drop(start, end)
# 執行
actions.perform()
except Exception:
print("exception")
finally:
driver.close()
#頁面切換
def pageSwitching():
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
#獲取當前百度介面的視窗控制程式碼
BD_windows = driver.current_window_handle
#列印
print(BD_windows)
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
write = driver.find_element_by_id("kw")
write.send_keys("CSDN")
# 點選
driver.find_element_by_id('su').click()
try:
#開啟一個網頁
driver.find_element_by_link_text(u'CSDN-專業IT技術社群').click()
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
#列印所有的視窗
print(driver.window_handles)
# 隱示等待,為了等待充分載入好網址
driver.implicitly_wait(5)
#視窗切換到第二個網頁
driver.switch_to_window(driver.window_handles[1])
#點選第二個網頁的"寫部落格"按鈕
driver.find_element_by_link_text(u'寫部落格').click()
time.sleep(5)
except Exception:
print("exception")
finally:
driver.quit()
if __name__ == '__main__':
pageInteraction()
#pageSwitching()
#elementDragging()
複製程式碼
大家可以關注我的微信公眾號:「秦子帥」一個有質量、有態度的公眾號!