文章目錄
Selenium WebDriver 簡介
-
Selenium WebDriver是一個本地和遠程的實時瀏覽器自動化工具,是最接近的模擬用戶行爲。
-
WebDriver的目標是提供一個良好設計的面向對象的API,提供了對於現代先進web應用程序測試問題的改進支持。
-
Selenium-Webdriver更好的支持頁面本身不重新加載而頁面的元素改變的動態網頁。
Selenium WebDriver 原理
-
WebDriver是按照C/S(Client/Server) 的模式設計的。
-
WebDriver 啓動目標瀏覽器,並綁定到指定端口。該啓動的瀏覽器實例,做爲web driver的remote server。
-
Client 端根據我們的需求以http請求形式發送給Server,並在執行各種操作後將返回值等信息返回。
-
Server端,也就是Remote server 需要依賴原生的瀏覽器組件(如:chromedriver.exe)來等待 Client 發送請求並做出響應。
Selenium WebDriver 安裝
安裝selenium庫,在命令行中輸入
pip install selenium
出現如下字樣,則安裝成功
Successfully installed selenium
下載與瀏覽器版本相匹配的webdriver
http://chromedriver.storage.googleapis.com/index.html
下載後將chromedriver.exe放到python安裝目錄下的Scripts目錄
Selenium WebDriver 使用
瀏覽器常用操作
啓動瀏覽器
不同的瀏覽器,方式略微不同
from selenium import webdriver
#谷歌瀏覽器
dr = webdriver.Chrome()
#火狐瀏覽器
dr = webdriver.Firefox()
打開網頁
執行該代碼之後,自動打開你輸入的網址
dr.get('http://www.baidu.com')
關閉瀏覽器
在工作結束後常常需要關閉瀏覽器,關閉瀏覽器的方式有兩種:
- close():關閉當前的瀏覽器窗口
- quit():不僅會關閉瀏覽器窗口,還會徹底的退出webdriver,釋放與driver server之間的連接,釋放所有的資源
from selenium import webdriver
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')
#退出瀏覽器
dr.quit()
#dr.close()
最大化瀏覽器
from selenium import webdriver
import time
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')
#最大化瀏覽器
dr.maximize_window()
#便於觀察
time.sleep(3)
#退出瀏覽器
dr.quit()
#dr.close()
自定義瀏覽器大小
from selenium import webdriver
import time
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')
dr.set_window_size(240, 320)
#便於觀察
time.sleep(3)
#退出瀏覽器
dr.quit()
#dr.close()
打印當前頁面的信息
打印當前頁面的title、url以及頁面源碼(源碼過多就不進行展示了)
from selenium import webdriver
import time
#谷歌瀏覽器
dr = webdriver.Chrome()
#打開網頁
dr.get('http://www.baidu.com')
print('current_url:',dr.current_url)
print('source:',dr.page_source)
print('title:',dr.title)
#便於觀察
time.sleep(3)
#退出瀏覽器
dr.quit()
#dr.close()
實現瀏覽器前進和後退
後退會返回到當前網頁的上一個網頁,前進也會返回到當前網頁的上一個網頁
from selenium import webdriver
import time
import os
dr = webdriver.Chrome()
first_url = 'http://www.baidu.com'
dr.get(first_url)
print('current_url',dr.current_url)
time.sleep(1)
second_url = 'http://www.news.baidu.com'
dr.get(second_url)
print('current_url',dr.current_url)
time.sleep(1)
dr.back()
print("backing to %s"%(first_url))
time.sleep(1)
dr.forward()
print("forward to %s"%(second_url))
time.sleep(1)
dr.quit()
單對象定位
- find_element(),用於單對象定位。
- 對象的定位和操作是webdriver的核心內容,其中操作是建立在定位的基礎之上,因此對象定位的地位就越發顯得重要了
演示文檔
打開百度首頁→鼠標右鍵點擊→查看網頁源碼
webdriver提供了一系列的對象定位方法,常用的有:
by_id
通過id定位需要用id的值定位
#通過id定位
print(dr.find_element_by_id('head').text)
by_name
通過name定位需要用name的值定位
#通過name定位
dr.find_element_by_name('mp')
by_class_name
通過class name定位需要用class name的值定位
#通過name定位
dr.find_element_by_name('mp')
by_tag_name
通過tag name定位需要用標籤的值(如,<a>的值爲a)定位
#通過tag name定位
print(dr.find_element_by_tag_name('div').text)
by_link_text
通過鏈接的文字描述來定位
如匹配下面圖片中的新聞鏈接
dr.find_element_by_link_text("新聞")
by_css_selector
不懂css selector的可以點擊瞭解或只用上面的方式CSS介紹
#獲取標籤名爲div的標籤
dr.find_element_by_css_selector('div')
by_xpath
不懂xpath的可以點擊瞭解或用其他的方式xpath lxml庫
dr.find_element_by_xpath('/html/body/form/div/label')
獲取屬性
獲取div標籤的id屬性
dr.find_element_by_tag_name('div').get_attribute('id')
獲取div標籤的文本內容
print(dr.find_element_by_tag_name('div').text)
一組對象定位
find_elements(),常用於定位一組對象或批量操作對象,用法與前面的單對象定位(find_element())一致(不清楚的往前面翻就行)。
模擬用戶操作
element.click()
模擬用戶點擊對象element
#
dr.find_element_by_link_text("新聞").click()
element.send_keys
模擬用戶向名爲p的文本框輸入python
dr.find_element_by_name('q').send_keys('python')
element.clear()
模擬用戶清除輸入的內容
dr.find_element_by_name('q').clear()
模擬鍵盤輸入
模擬用戶在鍵盤上輸入
from selenium.webdriver.common.keys import Keys
#模擬control+a
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'a'))
#模擬control+c
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'c'))
#模擬control+x
dr.find_element_by_id('p').send_keys((Keys.CONTROL, 'v'))