selenium是一款web自動(dòng)化測(cè)試工具口四,可以很方便地模擬真實(shí)用戶對(duì)瀏覽器進(jìn)行操作麸俘,它支持各種主流瀏覽器:IE尉间、Chrome雏赦、Firefox等孵、Safari差导、Opera等忆谓。
selenium有多種編程語(yǔ)言的客戶端驅(qū)動(dòng)孙技,編寫(xiě)自動(dòng)化腳本語(yǔ)法簡(jiǎn)潔夜赵,其中python的selenium庫(kù)便非常的受歡迎明棍。
你可以使用selenium做web測(cè)試或者爬蟲(chóng),自動(dòng)搶票寇僧、自動(dòng)下單也可以用selenium來(lái)做摊腋。
演示自動(dòng)打開(kāi)淘寶網(wǎng)(文末會(huì)有秒搶流程):
使用Selenium實(shí)現(xiàn)自動(dòng)化測(cè)試,需要3個(gè)要素:
1.selenium客戶端或者與特定編程語(yǔ)言綁定的客戶端驅(qū)動(dòng)婉宰,可以是python歌豺,java,js等心包;
2.瀏覽器驅(qū)動(dòng), 這個(gè)驅(qū)動(dòng)是根據(jù)不同的瀏覽器開(kāi)發(fā)的类咧,不同的瀏覽器使用不同的webdriver驅(qū)動(dòng)程序且需要對(duì)應(yīng)相應(yīng)的瀏覽器版本;
3.瀏覽器蟹腾,目前selenium支持市面上大多數(shù)瀏覽器痕惋,如:火狐,IE等娃殖;
安裝selenium
可以使用pip或conda命令安裝selenium:
pip install selenium
安裝瀏覽器驅(qū)動(dòng)
Selenium調(diào)用瀏覽器必須有一個(gè)webdriver驅(qū)動(dòng)文件值戳,下載好后把驅(qū)動(dòng)程序放到python安裝目錄里即可。
各大瀏覽器驅(qū)動(dòng)下載地址:
Firefox:
https://github.com/mozilla/geckodriver/releases/
Chrome:
https://sites.google.com/a/chromium.org/chromedriver/
IE:
http://selenium-release.storage.googleapis.com/index.html
以Chrome為例:
先在設(shè)置里查看Chrome版本:
然后下載對(duì)應(yīng)的chromedrive炉爆,可以在淘寶的鏡像網(wǎng)站下載:
http://npm.taobao.org/mirrors/chromedriver/
找到對(duì)應(yīng)的版本號(hào)下載堕虹,解壓到python安裝目錄里,或者anaconda安裝目錄scripts文件夾里芬首。
selenium操作瀏覽器
在notebook中進(jìn)行selenium的腳本編寫(xiě)赴捞,可以隨寫(xiě)隨調(diào),非常方便郁稍。
首先需要從selenium中導(dǎo)入webdriver模塊:
from selenium import webdriver
然后打開(kāi)瀏覽器:
browser = webdriver.Chrome()
最后可以打開(kāi)某網(wǎng)址:
browser.get("https://www.taobao.com/")
針對(duì)瀏覽器的主要操作方法:
- 創(chuàng)建瀏覽器對(duì)象:driver = webdriver.xxx()
- 窗口最大化:maximize_window()
- 獲取瀏覽器尺寸:get_window_size()
- 設(shè)置瀏覽器尺寸:set_window_size()
- 獲取瀏覽器位置:get_window_position()
- 設(shè)置瀏覽器位置:set_window_position(x,y)
- 關(guān)閉當(dāng)前標(biāo)簽/窗口:close()
- 關(guān)閉所有標(biāo)簽/窗口:quit()
selenium定位元素
因?yàn)閟elenium是模仿真實(shí)點(diǎn)擊瀏覽器的行為,所以必須要先定位網(wǎng)頁(yè)元素耀怜,才能進(jìn)行各種操作恢着。
定位頁(yè)面元素的8種主要方式
- id定位:driver.find_element_by_id(value)
- name屬性值定位:driver.find_element_by_name(value)
- 類名定位: driver.find_element_by_class_name(value)
- 標(biāo)簽名定位: driver.find_element_by_tag_name(value)
- 鏈接文本定位:driver.find_element_by_link_text(value)
- 部分鏈接文本:driver.find_element_by_partial_link_text(value)
- xpath路徑表達(dá)式:driver.find_element_by_xpath(value)
- css選擇器:driver.find_element_by_css_selector(value)
selenium操作網(wǎng)頁(yè)
定位元素后桐愉,需要對(duì)網(wǎng)頁(yè)進(jìn)行各種操作,比如點(diǎn)擊掰派、刷新从诲、保存等。
點(diǎn)擊展開(kāi)新的頁(yè)面碗淌,點(diǎn)擊方法:element.click()
其他主要操作方法:
- 請(qǐng)求某個(gè)url:driver.get(url)
- 刷新頁(yè)面操作:refresh()
- 回退到之前的頁(yè)面:back()
- 前進(jìn)到之后的頁(yè)面:forward()
- 獲取當(dāng)前訪問(wèn)頁(yè)面url:current_url
- 獲取當(dāng)前瀏覽器標(biāo)題:title
- 保存圖片:get_screenshot_as_png()/get_screenshot_as_file(file)
- 網(wǎng)頁(yè)源碼:page_source
使用selenium搶購(gòu)商品
- 導(dǎo)入selenium相關(guān)模塊
# 導(dǎo)入庫(kù)
from selenium import webdriver
import datetime
import time
- 打開(kāi)chrome瀏覽器
# 記錄時(shí)間
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 打開(kāi)chrome
browser = webdriver.Chrome()
- 登錄淘寶
# 登錄
def login():
# 打開(kāi)淘寶首頁(yè)盏求,通過(guò)掃碼登錄
browser.get("https://www.taobao.com/")
time.sleep(3)
# 打開(kāi)登錄界面
find_login = browser.find_element_by_link_text("親,請(qǐng)登錄")
if find_login:
find_login.click()
print("請(qǐng)掃碼登錄")
time.sleep(10)
login()
- 選擇購(gòu)物車列表
# 選擇購(gòu)物車列表
def picking(method):
# 是否全選購(gòu)物車
if method == 0:
while True:
try:
if browser.find_element_by_id("J_SelectAll1"):
browser.find_element_by_id("J_SelectAll1").click()
print('全選購(gòu)物車成功')
break
except:
print(f"找不到購(gòu)買(mǎi)按鈕")
else:
print(f"請(qǐng)手動(dòng)勾選需要購(gòu)買(mǎi)的商品")
time.sleep(1)
- 點(diǎn)擊結(jié)算按鈕
# 點(diǎn)擊結(jié)算按鈕
def settlement():
while True:
try:
if browser.find_element_by_id('J_SelectedItemsCount').text >= '1':
browser.find_element_by_link_text("結(jié) 算").click()
print(f"結(jié)算成功亿眠,準(zhǔn)備提交訂單")
break
except:
pass
- 點(diǎn)擊提交訂單按鈕
# 點(diǎn)擊提交訂單按鈕
def submitting():
while True:
try:
if browser.find_element_by_link_text('提交訂單'):
browser.find_element_by_link_text('提交訂單').click()
print(f"搶購(gòu)成功碎罚,請(qǐng)盡快付款")
break
except:
print(f"再次嘗試提交訂單")
- 開(kāi)始執(zhí)行搶購(gòu)
def run(times):
# 打開(kāi)購(gòu)物車列表頁(yè)面
print('正在搶購(gòu)!')
browser.get("https://cart.taobao.com/cart.htm")
time.sleep(3)
while True:
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 對(duì)比時(shí)間纳像,時(shí)間到的話就點(diǎn)擊結(jié)算
if now > times:
# 全選購(gòu)物車
picking(0)
# 點(diǎn)擊結(jié)算按鈕
settlement()
# 提交訂單
submitting()
print(now)
break
結(jié)論
selenium還有很多強(qiáng)大的功能荆烈,后續(xù)會(huì)繼續(xù)分享,也期待大家留言說(shuō)說(shuō)你的selenium使用心得竟趾。
最后補(bǔ)充一句憔购,因?yàn)閟elenium涉及操作網(wǎng)頁(yè),所以需要使用者有一定的html知識(shí)儲(chǔ)備岔帽,大家學(xué)之前可以先去看看html基礎(chǔ)知識(shí)玫鸟。