Python + Selenium操作一:截圖詳解


在做測試的時候,空口無憑都是白掐,特別是自動化測試的時候,更需要圖片來佐證自己發現的問題

話不多說,直接進入主題,技術就是這么直白

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

截圖一:get_screenshot_as_file()

截圖二:save_screenshot()

get_screenshot_as_file()方式

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

 

接下來運行代碼,保存的圖片如下:

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

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

這里需要注意的是,文件存放的路徑一定要正確,路徑中的\\雙斜杠,有一個是轉義符,這個就不多說了

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

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

代碼運行后,查看截圖的效果,如下:

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

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的配合了。今天所述內容,有誤的地方,希望大家及時指出,我也及時改正。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM