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

本文涉及的产品
简介: 以 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

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
2月前
|
存储 缓存 IDE
在函数计算(FC)中,如果已经按照指示完成了插件的安装,但插件没有显示在SD的菜单中
在函数计算(FC)中,如果已经按照指示完成了插件的安装,但插件没有显示在SD的菜单中
53 3
|
2月前
|
缓存 Java Serverless
Serverless 应用引擎常见问题之安装完serverless dev报错如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
30 4
|
2月前
|
人工智能 Serverless API
函数计算常见问题之函数计算和云上安装依赖的关系是什么
函数计算(Function Compute, FC)是阿里云提供的无服务器计算服务,它允许用户在无需管理服务器的情况下运行代码,但在配置和执行过程中可能遇到报错,本合集致力于梳理FC服务中的常见报错和配置问题,并提供解决方案,帮助用户优化函数执行环境。
38 1
|
4天前
|
运维 Serverless Linux
Serverless 应用引擎产品使用之在阿里函数计算中安装stable diffusion应用如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
21 4
|
2月前
|
人工智能 JavaScript 小程序
Serverless 应用引擎常见问题之函数计算安装serverless devs成功了但是配置密钥这步一直不成功如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
23 1
|
2月前
|
关系型数据库 Serverless 分布式数据库
Serverless 应用引擎常见问题之安装完serverless dev通过终端执行s config add返回错误如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
32 1
|
2月前
|
Web App开发 iOS开发 Python
Selenium安装与配置
Selenium是一个用于Web应用程序测试的自动化工具。它直接运行在浏览器中,模拟真实用户的操作。Selenium支持多种主流浏览器,如IE、Mozilla Firefox、Safari、Google Chrome、Opera和Edge等。在爬取数据的时候对于需要登录后才能爬取的情况往往可以利用Selenium来进行模拟登录,登录后进行数据的获取。这里先介绍Selenium的安装与配置,实现通过python来驱动浏览器进行操作。
31 2
|
2月前
|
Web App开发 Linux iOS开发
如何安装 Selenium 的 Chrome driver
如何安装 Selenium 的 Chrome driver
50 0
|
4月前
|
NoSQL Serverless Redis
在函数计算中,可以通过以下步骤正确安装 redis 模块
【1月更文挑战第4天】【1月更文挑战第20篇】在函数计算中,可以通过以下步骤正确安装 redis 模块
89 6
|
5月前
|
Serverless Python
在阿里函数计算中,你可以通过以下步骤在本地安装Python依赖
在阿里函数计算中,你可以通过以下步骤在本地安装Python依赖
65 1

热门文章

最新文章

相关产品

  • 函数计算