龙叔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解决验证码二次免密码登陆的问题