求在Vercel上成功运行Python版Selenium的示例代码
求在Vercel上成功运行Python版Selenium的示例代码
我之前在Vercel上部署Python Selenium项目的时候踩了好几个坑,比如驱动版本不兼容、容器环境下Chrome启动失败这些,现在给你分享一个亲测能跑通的示例,还有关键注意点:
第一步:配置依赖文件
先创建requirements.txt,把需要的包列进去:
selenium>=4.8.0 webdriver-manager>=4.0.0
第二步:编写核心代码(放在api/main.py,Vercel的Python函数必须在api目录下)
from selenium import webdriver from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.chrome.service import Service def handler(event, context): # 配置Chrome适配Vercel容器环境的选项 chrome_options = Options() # 新版无头模式,比旧的--headless更稳定,兼容性更好 chrome_options.add_argument("--headless=new") # 容器环境下必须关闭沙箱模式,否则Chrome启动失败 chrome_options.add_argument("--no-sandbox") # 解决容器内/dev/shm内存不足的问题 chrome_options.add_argument("--disable-dev-shm-usage") # 无头模式下不需要GPU加速 chrome_options.add_argument("--disable-gpu") # 设置窗口大小,避免页面元素定位异常 chrome_options.add_argument("--window-size=1920x1080") # 自动安装并匹配对应版本的ChromeDriver(不用手动下载驱动,适配Linux环境) service = Service(ChromeDriverManager().install()) driver = webdriver.Chrome(service=service, options=chrome_options) try: # 测试访问示例页面 driver.get("https://example.com") page_title = driver.title return { "statusCode": 200, "body": f"成功获取页面标题:{page_title}" } finally: # 必须关闭驱动,避免资源泄漏导致函数异常 driver.quit()
第三步:配置Vercel构建命令(创建vercel.json)
因为Vercel默认环境没有安装Chrome,所以需要在构建时安装chromium浏览器:
{ "functions": { "api/main.py": { "runtime": "@vercel/python@3.10", "installCommand": "pip install -r requirements.txt && apt-get update && apt-get install -y chromium-browser" } } }
关键注意点:
- 绝对不能用本地的
chromedriver.exe!Vercel的运行环境是Linux,Windows的驱动完全不兼容,用webdriver-manager可以自动适配环境,匹配Chrome和驱动的版本,避免版本不匹配的问题。 --no-sandbox和--disable-dev-shm-usage是容器环境下的必备参数,少了任何一个Chrome都可能启动失败。- 一定要在
finally块里调用driver.quit(),否则Vercel的函数进程可能会因为资源泄漏被强制终止。
备注:内容来源于stack exchange,提问作者Jojo Momo
相关产品推荐
相关产品推荐

