Selenium的安裝與Firefox配置以及Selenium基本用法(超詳細)

前言

先來看看Selenium的定義:php

Selenium 是一個用於Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操做同樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應用程序看是否可以很好得工做在不一樣瀏覽器和操做系統之上。測試系統功能——建立迴歸測試檢驗軟件功能和用戶需求。支持自動錄製動做和自動生成 .Net、Java、Perl等不一樣語言的測試腳本。css

Selenium安裝

1.PIP安裝:jquery

在pip路徑下輸入下面代碼:git

pip install selenium

複製代碼

2.經過Pycharm安裝:github

Pycharm軟件中輸入:File-->Default Settingsweb

Firefox環境配置

1.網上下載火狐瀏覽器,很簡單,不用多說windows

2.firefox路徑添加環境變量api

找到firefox的路徑,好比C:\Program Files\Mozilla Firefox,找到後添加一下:瀏覽器

**3.下載geckodriver,**下載網址:bash

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()

複製代碼

你們能夠關注個人微信公衆號:「秦子帥」一個有質量、有態度的公衆號!

相關文章
相關標籤/搜索