Python(一)截图上传OSS并返回图片地址

截图上传OSS并返回图片地址

一、代码实现

# !/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import time
import oss2
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from pydantic import BaseModel
from fastapi import FastAPI

app = FastAPI()


class Item(BaseModel):
    url = 'default'
    pic_name = 'default_url'

def get_image(url, pic_name):
    print("python版本号:"+sys.version)
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    #添加沙盒模式
    chrome_options.add_argument("--no-sandbox")

    # 创建浏览器对象
    # windows
    driver = webdriver.Chrome(executable_path = 'E:/projects/onegolf/onegolf-parent/onegolf-server/onegolf-api/onegolf-python/windows/chromedriver', options=chrome_options)
    # linux
    # driver = webdriver.Chrome('./chromedriver', options=chrome_options)

    # 打开网页
    driver.get(url)
    # driver.maximize_window()
    # 加延时 防止未加载完就截图
    time.sleep(1)

    # 用js获取页面的宽高,如果有其他需要用js的部分也可以用这个方法
    width = driver.execute_script("return document.documentElement.scrollWidth")
    height = driver.execute_script("return document.documentElement.scrollHeight")

    # 将浏览器的宽高设置成刚刚获取的宽高
    driver.set_window_size(width, height)
    time.sleep(1)

    # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    auth = oss2.Auth('ossAccessKeyId', 'ossAccessKeySecret')
    # Endpoint以北京为例,其它Region请按实际情况填写。
    bucket = oss2.Bucket(auth, 'http://oss-cn-beijing.aliyuncs.com', 'ossBucketName')

    bucket.put_object('oss/image/match/'+pic_name, driver.get_screenshot_as_png())
    driver.quit()

    return_url = 'https://ip/oss/image/match/'+pic_name
    print("图片地址:" + return_url)
    return return_url


@app.post('/poster')
def calculate(request_data: Item):
    print("请求地址:"+request_data.url)

    return get_image(request_data.url, request_data.pic_name)


if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app=app,
                host="0.0.0.0",
                port=29997,
                workers=1)

二、代码讲解

i:__main__方法使用了uvicorn,指定web应用ip和端口。

ii:calculate方法使用fastapi提供了请求路径,在这个接口中接收了两个参数,网页地址(需要截图的网页地址),图片名称(给图片命名),最后直接传递给核心实现方法get_image()方法。

iii:在get_image()一共做了4件事,①驱动谷歌浏览器,②访问网页并截图,③将截图上传至OSS,④组装图片完整路径并返回给调用者

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值