部署含爬虫功能的Streamlit应用至Azure Web App遇WebDriverException错误
解决Azure Web App部署Streamlit爬虫应用的WebDriverException错误
问题根源
状态码127表示系统找不到chromedriver或Chrome/Chromium可执行文件。直接在requirements.txt中添加chromium-browser会导致部署失败,因为这是Debian/Ubuntu系统级包,并非Python包,pip无法解析安装。
分步解决方案
1. 修正requirements.txt
移除chromium-browser,只保留Python依赖包,示例:
streamlit>=1.20.0 selenium>=4.8.0 # 若需seleniumbase,保留但确保版本兼容 # seleniumbase>=4.16.0
2. 在Azure中安装系统级依赖
Azure Web App支持通过启动命令或部署后脚本安装系统包,二选一即可:
方式一:配置启动命令
在Azure门户的Web App → 配置 → 常规设置 → 启动命令中,填入:
apt-get update && apt-get install -y chromium-browser chromium-chromedriver && streamlit run your_app.py --server.port 8000 --server.address 0.0.0.0
替换your_app.py为你的Streamlit应用文件名
方式二:使用部署后脚本
在项目根目录创建post_deploy.sh文件,内容如下:
#!/bin/bash apt-get update apt-get install -y chromium-browser chromium-chromedriver
本地执行chmod +x post_deploy.sh赋予执行权限后再上传,Azure会自动在部署后执行该脚本。
3. 配置Selenium使用正确路径
在爬虫代码中指定Chrome二进制文件和chromedriver的系统路径,同时添加适配Azure环境的参数:
from selenium import webdriver from selenium.webdriver.chrome.options import Options def init_driver(): options = Options() # 无头模式适配Azure容器环境 options.add_argument('--headless') # 禁用沙箱(必需配置) options.add_argument('--no-sandbox') # 解决/dev/shm空间不足问题 options.add_argument('--disable-dev-shm-usage') # 指定Azure中Chromium的路径 options.binary_location = '/usr/bin/chromium-browser' # 指定chromedriver路径 driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver', options=options) return driver
4. 重新部署应用
将修正后的代码、requirements.txt和(可选)post_deploy.sh重新部署到Azure Web App,即可解决启动时的WebDriverException错误。
内容的提问来源于stack exchange,提问作者Thiziri
相关产品推荐
相关产品推荐

