以 selenium + chromium 为例在函数计算中安装复杂依赖

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
函数计算FC,每月15万CU 3个月
简介: 以 selenium + chromium 为例在函数计算中安装复杂依赖

背景


函数计算 FC 提供了基于 Debian9 和 Debian10 并包含各种语言支持的运行时。但是在使用某些复杂依赖时,这些运行时默认是不满足需求的。可能是因为某些依赖所需要的 apt 依赖并没有在函数计算的运行时里。这种情况下如何使用函数计算呢?


解决方案


方案1(强烈推荐): 函数计算支持用“容器镜像”创建函数,所以您可以通过 Dockerfile 来完全定义自己的运行环境。
方案2: 在函数计算提供的运行时中,手动安装确实的 apt 依赖等。


方案2


方案1中您可以通过 Docker 自己安装任何依赖。本文主要介绍方案 2。


步骤1


创建函数时选择“自定义运行时(Web 函数)” 中的 Debian10。因为目前内置运行时中都是基于 Debian9 的,有一些依赖比较旧了。例如目前最新的 Chromium 已经不能在 Debian9 中方便的运行了。因此,我们可以选择最新的 Debian10 的运行时。

image.png



步骤2


创建 Chromium 的层。去 https://vikyd.github.io/download-chromium-history-version/#/ 下载 Linux 64 的依赖。目前最新版本为 1191875 https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/1191875/。您需要下载 chrome-linux.zip 和 chromedriver_linux64.zip 两个文件。然后您可以使用这两个文件创建两个层(注意:兼容运行时选择 Debian10),并配置给函数。

image.png
image.png

image.png
image.png



步骤3


“测试”函数,并登陆到实例,测试 chrome 和 chromedriver 所缺少的依赖。目标是可以让 chrome 和 chromedriver 可以执行。我们可以在“登陆实例“中输入下方命令,检查缺少的依赖,并通过 apt-get 安装缺失的依赖。

/opt/chrome-linux/chrome --disable-dev-shm-usage--no-sandbox--headless--disable-gpu--no-zygote--disable-setuid-sandbox--no-first-run


image.png
image.png


步骤4


最后发现缺少的依赖如下。安装完如下依赖后,chrome 可以启动成功。我们可以通过在线构建层的功能把这些依赖和 Python 依赖安装到层里。并把层配置给函数。


apt 依赖

libnss3 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon-x11-0 libxcomposite-dev libxdamage1 libxrandr2 libgbm-dev libasound2

pip 依赖
selenium==4.12.0
undetected_chromedriver==3.5.3


image.png

image.png


步骤5


更新代码,进行测试。并验证截图成功!

fromflaskimportFlaskfromflaskimportrequestimportundetected_chromedriverasucREQUEST_ID_HEADER='x-fc-request-id'app=Flask(__name__)
@app.route("/invoke", methods= ["POST"])
defhello_world():
rid=request.headers.get(REQUEST_ID_HEADER)
print("FC Invoke Start RequestId: "+rid)
data=request.stream.read()
print(str(data))
print("FC Invoke End RequestId: "+rid)
print("=============")
options=uc.ChromeOptions()
options.binary_location="/opt/chrome-linux/chrome"options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
options.add_argument("--headless")
options.add_argument("--disable-gpu")
options.add_argument("--no-zygote")
options.add_argument("--disable-setuid-sandbox")
options.add_argument("--no-first-run")
driver=uc.Chrome(driver_executable_path='/opt/chromedriver_linux64/chromedriver', options=options)
driver.get('https://www.baidu.com')
driver.save_screenshot('/tmp/baidu.png')
driver.quit()
return"Hello, World!"if__name__=='__main__':
app.run(host='0.0.0.0',port=9000)


image.png

image.png

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
16天前
|
Web App开发 Linux Python
linux上安装selenium环境及测试
该文章提供了在Linux CentOS上安装Selenium环境、Chrome浏览器及Chromedriver的详细步骤,并演示了如何以无头模式进行测试。
47 0
|
2月前
|
缓存 运维 Serverless
函数计算产品使用问题之如何在Custom Runtime中引用层中的依赖
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
2月前
|
小程序 Serverless 开发工具
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
小程序开发问题之在小程序中安装并初始化小程序Serverless客户端SDK如何解决
|
2月前
|
运维 Serverless 数据处理
函数计算产品使用问题之Animatediff插件怎么安装
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
机器学习/深度学习 缓存 运维
函数计算产品使用问题之如何解决SD中安装了ebsynth_utility插件但在webui中没有入口的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
网络协议 Serverless Python
函数计算操作报错合集之安装ebsynth_utility插件时报错,该如何处理
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
3月前
|
弹性计算 Serverless API
函数计算产品使用问题之如何安装插件和配置依赖包
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
Serverless 文件存储 对象存储
函数计算操作报错合集之如何处理安装了ControlNet但无法加载出预览图并报错
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
函数计算操作报错合集之如何处理安装了ControlNet但无法加载出预览图并报错
|
3月前
|
Serverless C语言 Docker
函数计算操作报错合集之如何处理安装时遇到“GLIBC_2.27 not found”的错误提示
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
3月前
|
缓存 运维 Serverless
函数计算产品使用问题之在SD上安装了'inpaint anything'这个插件,但是不显示,是什么原因
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。

相关产品

  • 函数计算