前戲
在進行web自動化的時候,只有一個報錯信息是不行的,往往需要截圖來幫助我們來快速的定位問題,試想一下,我們在一個彈框里添加一些數據,點擊保存后,然后在操作元素,這時selenium報錯,說找不到這個元素,如果只看錯誤信息,那我們可能會以為是沒找到這個元素,而前面的添加數據保存是成功的。那有沒有這樣的可能,當我們點擊保存的時候,一個必填項的輸入框由於元素的改變,而沒有輸入,這時候點擊保存會提示有必填項沒有填,所以問題是出在點擊保存之前,而不是在點擊保存之后。如果這時能保存到圖,我們就能很方便的定位到問題
實戰
# 打開百度首頁截圖,輸入 python 搜索后截圖 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.get_screenshot_as_file(r'E:\1234.png') # 路徑不存在不報錯,但保存不了 sleep(2) driver.find_element_by_css_selector('#kw').send_keys('python') driver.find_element_by_css_selector('#su').click() sleep(10) driver.get_screenshot_as_file(r'E:\2345.png') driver.quit()
注意:圖片的后綴必須是png,如果不是png,則會報一個警告,在源碼中也有說明
def get_screenshot_as_file(self, filename): """ Saves a screenshot of the current window to a PNG image file. Returns False if there is any IOError, else returns True. Use full paths in your filename. :Args: - filename: The full path you wish to save your screenshot to. This should end with a `.png` extension. :Usage: driver.get_screenshot_as_file('/Screenshots/foo.png') """ if not filename.lower().endswith('.png'): warnings.warn("name used for saved screenshot does not match file " "type. It should end with a `.png` extension", UserWarning) png = self.get_screenshot_as_png() try: with open(filename, 'wb') as f: f.write(png) except IOError: return False finally: del png return True
if not filename.lower().endswith('.png') 如果不是以.png結尾,則會拋出警告