Python + Selenium操做一:截圖詳解

在作測試的時候,空口無憑都是白掐,特別是自動化測試的時候,更須要圖片來佐證本身發現的問題python

話很少說,直接進入主題,技術就是這麼直白web

Webdriver自帶截圖功能,get_screenshot_as_file(),save_screenshot(),使用起來仍是蠻方便的學習

截圖一:get_screenshot_as_file()

截圖二:save_screenshot()

get_screenshot_as_file()方式

該方式很簡單,經過driver獲取該方法,將截圖要保存的路徑寫入就好,先看一張圖,沒運行代碼的時候,Picture目錄下尚未名爲baidu.png的圖片,建個Picture目錄,是爲了方便管理截圖的圖片測試

 

接下來運行代碼,保存的圖片以下:優化

能夠看到,圖片是截圖成功了的,在對應文件夾下也是能夠看到圖片的,代碼以下:ui

# coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
try:
    picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\baidu.png')
    print("%s:截圖成功!!!" % picture_url)
except BaseException as msg:
    print(msg)
driver.quit()

這裏須要注意的是,文件存放的路徑必定要正確,路徑中的\\雙斜槓,有一個是轉義符,這個就很少說了url

這種方式寫法太過於死板,這樣運行下去,圖片名字會重名,達不到什麼好效果,能夠生成代碼運行的當前時間,來作爲圖片名,這樣就不會再出現該問題了,修改代碼以下:spa

# coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
print(picture_time)
try:
    picture_url=driver.get_screenshot_as_file('G:\\201801-\\python_code\\Demo\\Picture\\'+ picture_time +'.png')
    print("%s:截圖成功!!!" % picture_url)
except BaseException as msg:
    print(msg)
driver.quit()

代碼運行後,查看截圖的效果,以下:code

該方法使用起來更加方便,算是一個小小優化blog

save_screenshot()方式

save_screenshot()與get_screenshot_as_file()方式都是同樣,先看一個小例子,代碼以下:

# 截圖方式二
# coding=utf-8
from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
try:
    picture_url=driver.save_screenshot('.\\baidu1.png')
    print("%s :截圖成功!!!" % picture_url)
except BaseException as msg:
    print("%s :截圖失敗!!!" % msg)
driver.quit()

運行該代碼後,在當前目錄下會保存成功一張名爲baidu1.png的圖片,以下:

一種方式學會,另外一種是否是很簡單了,接下來以這種截圖方式,來作個優化吧,先看代碼:

# 截圖方式二
# coding=utf-8
from selenium import webdriver
import os
import time
# 生成年月日時分秒時間
picture_time = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
directory_time = time.strftime("%Y-%m-%d", time.localtime(time.time()))
print(picture_time)
print(directory_time)
# 打印文件目錄
print(os.getcwd())
# 獲取到當前文件的目錄,並檢查是否有 directory_time 文件夾,若是不存在則自動新建 directory_time 文件
try:
    File_Path = os.getcwd() + '\\' + directory_time + '\\'
    if not os.path.exists(File_Path):
        os.makedirs(File_Path)
        print("目錄新建成功:%s" % File_Path)
    else:
        print("目錄已存在!!!")
except BaseException as msg:
    print("新建目錄失敗:%s" % msg)

driver = webdriver.Chrome()
driver.get("https://baidu.com/")
try:
    url=driver.save_screenshot('.\\' + directory_time + '\\' + picture_time + '.png')
    print("%s :截圖成功!!!" % url)
except BaseException as pic_msg:
    print("截圖失敗:%s" % pic_msg)
time.sleep(2)
driver.quit()

 該代碼的優化,是自動建立日期目錄,並將截取的圖片以年月日時分秒命名保存在當前日期目錄下,這樣就能很方便的查看圖片保存路徑,也方便管理本身的測試圖片

 運行代碼,咱們來查看結果,以下:

這樣運行代碼後,就自動生成了名爲2018-09-16的文件夾,截取的圖片命名爲2018-09-16-16_14_18.png,並保存在2018-09-16的文件夾下,若是明天運行該代碼,就會生成新的文件夾,並命名爲2018-09-17,這樣就很好的區分了圖片日期來源,若是再次運行該代碼,就會提示文件夾已存在,圖片依然截取成功,以下:

好了,這就是今天的截圖內容了,還有可優化的地方,好比,截取指定大小的圖片,截取元素的圖片,若是頁面很長,單單使用該兩種方式是截取不全的,這就須要使用JS的配合了。今天所述內容,有誤的地方,但願你們及時指出,我也及時改正。

學習的一點心得,你們都知道,遇到問題,不要逃避,更不要慌張,慢慢來,沉下心來,多度娘,多看博客,終究會解決的。今天在使用第二種方式優化代碼截圖的時候,因爲沒有新建目錄的那一步,因此一直截圖不成功,後面靈機一動,先給建立一個目錄,再運行代碼,結果就截圖成功了,有點小喜悅。

 

本文僅表明做者觀點,系做者@溫一壺清酒發表。轉載請註明出處:http://www.cnblogs.com/hong-fithing/
相關文章
相關標籤/搜索