web自动化:6种窗口截图方法、文件打开形式、文件路径及时间戳命名
本文主要介绍6种窗口截图方式及源码分析,其中包括整屏截图和根据定位的元素截取相应的图片。此外,在窗口截图方法种还用到了文件路径、时间戳命名、文件打开方式等,在文中也将简单的做介绍。
一、窗口截图方法
常用的窗口截图方法是get_screenshot_as_file(filename)和save_screenshot(filename),这两种方法可以直接生成图片。
get_screenshot_as_png()和get_screenshot_as_base64()不能直接生成图片,需要进行进一步的操作。
1、get_screenshot_as_base64()
使用该方法截图后的图片是以base64加密过的,需要使用base64.b64decode(img)其进行解密。并且,解密后的是二进制的,还需要将其进一步操作。
使用该方法截取的是整屏的图片。
import base64
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = r"https://www.baidu.com"
driver.get(url)
driver.maximize_window()driver.find_element(By.ID, "kw").send_keys("搜索")img = driver.get_screenshot_as_base64()
img = base64.b64decode(img)
with open("./img.png", "wb") as f:f.write(img)sleep(2)
driver.quit()
2、screenshot_as_base64
该方法和get_screenshot_as_base64()类似,结果都是加密过的。但是此方法可以根据定位元素进行图片的截取。
注意:screenshot_as_base64没有括号。
import base64
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = r"https://www.baidu.com"
driver.get(url)
driver.maximize_window()element = driver.find_element(By.ID, "kw")
element.send_keys("搜索")img = element.screenshot_as_base64
img = base64.b64decode(img)
with open("./img.png", "wb") as f:f.write(img)sleep(2)
driver.quit()
3、get_screenshot_as_png()
与get_screenshot_as_base64()类型,结果是二进制的,不能直接生成图片,需要进一步操作。与get_screenshot_as_base64()不同的是,该方法的结果不是加密的。
get_screenshot_as_png()源码return的是b64decode(self.get_screenshot_as_base64().encode(“ascii”))。
使用该方法截取的是整屏的图片。
import base64
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = r"https://www.baidu.com"
driver.get(url)
driver.maximize_window()element = driver.find_element(By.ID, "kw")
element.send_keys("搜索")img = driver.get_screenshot_as_png()
with open("./img.png", "wb") as f:f.write(img)sleep(2)
driver.quit()
4、screenshot_as_png
该方法和get_screenshot_as_png()类似,结果是二进制的。但是此方法可以根据定位元素进行图片的截取。
注意:screenshot_as_png没有括号。
import base64
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = r"https://www.baidu.com"
driver.get(url)
driver.maximize_window()element = driver.find_element(By.ID, "kw")
element.send_keys("搜索")img = element.screenshot_as_png
with open("./img.png", "wb") as f:f.write(img)sleep(2)
driver.quit()
5、get_screenshot_as_file(filename)
使用该方法可以直接生成图片,不需要进行额外的处理。实际上,源码中get_screenshot_as_file(filename)方法是将get_screenshot_as_png()方法进行处理的。
使用该方法截取的是整屏的图片。
import base64
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = r"https://www.baidu.com"
driver.get(url)
driver.maximize_window()element = driver.find_element(By.ID, "kw")
element.send_keys("搜索")driver.get_screenshot_as_file("./img.png")sleep(2)
driver.quit()
6、save_screenshot(filename)
该方法的用法和get_screenshot_as_file(filename)一致,源码中save_screenshot(filename) return的是get_screenshot_as_file(filename)。
import base64
from time import sleepfrom selenium import webdriver
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
url = r"https://www.baidu.com"
driver.get(url)
driver.maximize_window()element = driver.find_element(By.ID, "kw")
element.send_keys("搜索")driver.save_screenshot("./img.png")sleep(2)
driver.quit()
二、文件打开形式
在使用get_screenshot_as_png()、screenshot_as_png、get_screenshot_as_base64()和screenshot_as_base64进行截图时,需要将二进制数据进行进一步的处理,with open(“./img.png”, “wb”) as f 中”wb“的意思是以二进制形式写入。
下面介绍几种常见的文件打开形式:
1、基础模式
- r:只读,以文本模式打开文件,文件不存在时会报错
- w:写入,以文本模式打开文件,覆盖写入(清空原内容),文件不存在时会新建
- a:追加,以文本模式打开文件,在文件末尾追加内容(不覆盖原内容),文件不存在时会新建
2、二进制模式
- rb:二进制只读
- wb:二进制写入(覆盖)
- ab:二进制追加
3、读写组合模式
- r+:文本读写,文件不存在时会报错,不会清空原内容,但是写入时会覆盖当前位置的内容
- w+:文本读写,文件不存在时会新建,会清空原有内容
- rb+ / wb+ / ab+ :对应的二进制读写模式
4、其他模式
- x:独立创建,仅在文件不存在时创建并写入,否则报错(避免覆盖已有文件)。支持python、php、ruby语言。
三、文件路径
保存截图时,需要指定文件名及路径,如with open(“./img.png”, “wb”) as f 的”./img.png“表示将截图在当前路径下保存为img.png。
- 当前路径:./
- 上一级路径:…/
四、时间戳命名
保存截图时,如果想以当前时间命名,则需要使用到时间戳命名。
1、导包
from time import strftime
2、使用
driver.get_screenshot_as_file(“./%s.png” % (strftime(“%Y_%m_%d %H_%M_%S”)))