Chrome截图保存在本地并通过邮件发送多张图片

1. 准备工作

    Chrome下载和ChromeDriver下载(注意:浏览器的版本和驱动的版本一定要匹配

    下载链接可参考:https://blog.csdn.net/seedinspring/article/details/89850331

    将ChromeDriver解压到 /python3/lib/python3.6/site-packages/selenium/webdriver/chrome/ 这个文件夹下

2. 截图代码

from selenium import webdriver

from selenium.webdriver.chrome.options import Options

from PIL import Image

# 截图配置信息

chrome_options = Options()

chrome_options.add_argument('--no-sandbox')

chrome_options.add_argument('--disable-dev-shm-usage')

chrome_options.add_argument('--headless')

# 启动Chrome

driver = webdriver.Chrome(executable_path="ChromeDriver的位置", chrome_options=chrome_options)

# Chrome界面最大化

driver.maximize_window()

# 设置图片分辨率

driver.set_window_size(1366, 768)

# 访问图片的url

driver.get('图片所在的url')

sleep(3)

# 截取整个网页上某一张图片

driver.save_screenshot('全屏图片保存地址')

img = driver.find_element_by_css_selector("[class='f12查看class名,写到这里']")  # 根据class来选取其中某一张图片

# 这一张图片的上、下、左、右

left = img.location['x']

top = img.location['y']

right = img.location['x'] + img.size['width']

bottom = img.location['y'] + img.size['height']

# 定位并保存

photo = Image.open('全屏图片保存地址')

photo = photo.crop((left, top, right, bottom))

photo.save('这一张图片的保存的地址')

# 退出Chrome

driver.quit()


3. 发送多张图片代码

def send_email_common(subject,content,to_list,cc_list,bbs=False,img=None):

    pass

4. jinja2模板代码

Jinja2是基于python的模板引擎,Flask使用jinja2作为框架的模板系统,使用django等其他Python web框架也可以方便的集成jinja2模板系统。jinja2更多模板书写参考:https://www.w3cschool.cn/yshfid/


# loop.index是循环的次数,从1开始

# loop.index|string将数字转换为字符串

# with中的tmp是局部变量,只能在with中使用

# cid是发邮件时图片src的写法

{% if exception_list %}

    {% for row in exception_list %}

       

{{ row.instance__instance_name }}风险详情:图片链接


        {% with tmp="image" + loop.index|string %}

            imageid

        {% endwith %}

    {% endfor %}

{% endif %}

5. 补充一个小技能(图片拼接)

from PIL import Image

if id_list:

    im_list = []

    for id in id_list:

        im_list.append(Image.open('./Screenshots/%s.png' % id))

    # print(im_list)

    width, height = im_list[0].size

    result = Image.new(im_list[0].mode, (width, height * len(im_list)))

    for i, im in enumerate(im_list):

        result.paste(im, box=(0, i * height))

    result.save('./Screenshots/%s.png' % datetime.date.today().strftime('%Y%m%d'))

    with open('./Screenshots/%s.png' % datetime.date.today().strftime('%Y%m%d'), 'rb') as f:

    img = f.read()

    print(img)

6. 总结

    最后实现的功能是在邮件中一个url对应一张图片

你可能感兴趣的:(Chrome截图保存在本地并通过邮件发送多张图片)