七 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()
示例

 

posted on 2020-03-22 11:15  rwwh  阅读(232)  评论(0)    收藏  举报

导航