龙叔python-selenium加chromedriver实现自动浏览器截图

Posted 龙叔运维

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了龙叔python-selenium加chromedriver实现自动浏览器截图相关的知识,希望对你有一定的参考价值。

作为运维,很多时候是需要定时发一些巡检报告的,巡检内容需要包含一些监控图,但如果手动截图整理后去发,会比较繁琐,所以自动截图就很有必要,自动截取想要的监控图保存成图片,然后自动用图片组成巡检报告定时发出,省时省力

这里的自动截图方案 是用的selenium

 

环境安装

windows和linux安装环境有些不一样,可恶意参考下面的方法,但是代码都是一样的

下载chromedriver.exe地址(下载对应自己chrome版本的,也有windows和linux版本的,代码要指定该驱动的路径)
http://npm.taobao.org/mirrors/chromedriver  

windows环境

【1】要有chrome浏览器

【2】根据自己浏览器版本在上面的地址下载对应版本的驱动

liinux环境

安装chrome

yum makecache
yum install google-chrome-stable -y

安装chromedriver驱动

查看当前chrome版本:

google-chrome --version

下载对应版本驱动:

wget  http://npm.taobao.org/mirrors/chromedriver/87.0.4280.88/chromedriver_linux64.zip

将包放在指定位置

# 创建存放目录
mkdir -p /opt/driver/bin
# 解压zip包
unzip chromedriver_linux64.zip -d /opt/driver/bin/

配置环境变量

vim /etc/profile
...
# 添加内容
export DRIVER=/opt/driver
export PATH=$PATH:$DRIVER/bin

然后source /etc/profile 生效修改

确认安装成功

chromedriver --version

需要安装的python包

【1】selenium:浏览器自动化测试框架,也是用来操作浏览器的,支持无头启动浏览器

pip install selenium

【2】PIL:图像处理标准库,这里是用来对截取的网页托图片做加工

pip3 install Pillow

 

代码

# -*- coding: utf-8 -*-

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os
import time
from PIL import Image
save_path = "./"
class MyChrome():
    def __init__(self,chromedriver_path):
        chromedriver = chromedriver_path
        os.environ["webdriver.chrome.driver"] = chromedriver
        chrome_options = Options()
        chrome_options.add_argument('--no-sandbox')
        chrome_options.add_argument('--headless')
        chrome_options.add_argument('--disable-gpu')
        self.driver = webdriver.Chrome(chromedriver,chrome_options=chrome_options)

    def screen_shot(self,shot_url:str,shot_left:int,shot_top:int,shot_right:int,shot_bottom:int,sleep_time:int):
        # 打开页面
        self.driver.get(shot_url)
        time.sleep(sleep_time)

        # js获取页面的宽高
        width = self.driver.execute_script("return document.documentElement.scrollWidth")
        height = self.driver.execute_script("return document.documentElement.scrollHeight")

        #设置浏览器的宽和高为页面的宽和高
        self.driver.set_window_size(width, height)
        time.sleep(sleep_time)

        #截图并关掉浏览器
        pic_name = r'tmp.png'
        self.driver.save_screenshot(pic_name)
        self.driver.close()

        # 截取指定区域的截图
        photo = Image.open(pic_name)
        photo = photo.crop((shot_left, shot_top, shot_right, shot_bottom))

        png_path = save_path+str(time.time())+'.png'
        photo.save(png_path)

        return png_path

if __name__ == '__main__':
    my_chrome = MyChrome('/opt/driver/bin/chromedriver')
    my_chrome.screen_shot('https://blog.csdn.net/github_30641423?spm=1010.2135.3001.5343',100,80,400,220,1)

 

效果展示

截取的整个页面,作为裁剪的基础图

 

裁剪的指定区域的截图

 

 

推荐公众号:龙叔18岁

 

 

 

以上是关于龙叔python-selenium加chromedriver实现自动浏览器截图的主要内容,如果未能解决你的问题,请参考以下文章

在docker容器中部署python-selenium+chrome-headless自动化脚本(续)

python-selenium -- 弹出框处理

python-selenium解决验证码二次免密码登陆的问题

使用 chrome headless 和 selenium 下载

python-selenium登陆今日头条

python-selenium自动化测试网页