七 Selenium之截图
一 网页屏幕截图
selenium截取截屏,有四个方法,先看下源码介绍:
1. 先来看看 save_screenshot(filename)

可以看到要求,保存的文件,必须是以.png结尾的,朋友们要记得!然后他return了另外一个方法,接着走…
2 get_screenshot_as_file

可以看到,这里有一个文件结尾判断,封装了UserWarning,会给出提示信息并终止程序…
看到这两段代码,你就知道以后用哪个方法保存文件了吧。肯定用get_screenshot_as_file,干嘛平白无故多一次回调函数…
3. get_screenshot_as_png()
看上段代码中的这行png = self.get_screenshot_as_png(),前面俩只是传销最底层发广告的,这是个业务部长…
你看到先创建,又在finally中 del png,就应该知道,它存中间变量…取方法内部看看


示例:

二 保存局部网页
代码分析
要局部截图,首先正常的网页登陆后,我们需要定位到这个框体,F12看看如何定位:

我们通过driver.find_element_by_class_name(‘main-top’)即可定位到该元素。
那么接下来需要引入两个方法
element.location:获取element的位置,返回值是一个x,y的坐标点

element.size:获取element的元素大小即长和宽


下面可以使用Pillow抠图
import os from selenium import webdriver from PIL import Image class SaveLongPicture: # 清风Python个人主页 BaseUrl = "https://www.jianshu.com/u/d23fd5012bed" # 脚本目录 BaseDir = os.path.dirname(os.path.realpath(__file__)) def __init__(self): self.driver = self.init_driver() self.long_picture = os.path.join(self.BaseDir, 'BreezePython.png') @staticmethod def init_driver(): options = webdriver.ChromeOptions() options.add_argument('--start-maximized') options.add_argument('disable-infobars') return webdriver.Chrome(options=options) def prepare_work(self): self.driver.get(self.BaseUrl) self.driver.add_cookie(cookie) self.driver.refresh() self.base_handle = self.driver.current_window_handle def add_cookie(self): self.driver.get(self.BaseUrl) self.driver.add_cookie(cookie) self.driver.refresh() def save_crop_img(self): self.driver.get(self.BaseUrl) # 定位元素 title = self.driver.find_element_by_class_name('main-top') # 打印元素位置、元素尺寸 print(title.location, title.size) # 保存图片 self.driver.get_screenshot_as_file(self.long_picture) # 元素参数获取 left = title.location.get('x') top = title.location.get('y') right = title.size.get('width') + left bottom = title.size.get('height') + top # 读取图片 img = Image.open(self.long_picture) # 图片裁剪 title = img.crop((left, top, right, bottom)) # 局部保存 title.save('title.png') def run(): # 实例化方法 start_test = SaveLongPicture() # cookie登陆 start_test.add_cookie() # 裁剪图片 start_test.save_crop_img() if __name__ == '__main__': cookie = { 'name': 'remember_user_token', 'value': ('......') } run()
浙公网安备 33010602011771号