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 %}
<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对应一张图片