美文网首页
Chrome截图保存在本地并通过邮件发送多张图片

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

作者: 金融测试民工 | 来源:发表于2020-11-19 23:46 被阅读0次

    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 %}

            <h4>{{ row.instance__instance_name }}风险详情:<a href={{ row.url }}>图片链接</a></h4><br>

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

                <img src="cid:{{ tmp }}" alt="imageid" width="1200"><br>

            {% 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截图保存在本地并通过邮件发送多张图片

          本文链接:https://www.haomeiwen.com/subject/kkuriktx.html