You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Alpine Docker中安装Chromium以使用requests_html的html.render()

在Alpine Docker中处理JS渲染页面的问题解决

问题背景

需要抓取JS渲染的网站,使用requests_html库可实现该需求,本地运行时首次会自动安装Chromium完成页面渲染,但在Alpine Docker容器中运行时出现文件找不到的错误。

测试代码

from requests_html import HTMLSession

url = "examplesite"  # 替换为目标网站URL

session = HTMLSession()
r = session.get(url)
r.html.render(sleep=1)
print(r.html.html)

报错信息

FileNotFoundError: [Errno 2] No such file or directory: '/root/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome': '/root/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome'

尝试过的无效Docker配置

FROM python:3.7-alpine3.13

RUN apk add --no-cache  chromium --repository=http://dl-cdn.alpinelinux.org/alpine/v3.10/main

解决方案

方案1:修复Alpine Docker中Chromium的安装与配置

之前的配置无效是因为使用了与基础镜像版本不兼容的Alpine源,且未指定requests_html使用系统安装的Chromium,导致库仍尝试自动下载私有版本。正确的Dockerfile配置如下:

FROM python:3.7-alpine3.13

# 安装Chromium及依赖,使用与基础镜像匹配的Alpine 3.13源
RUN apk add --no-cache chromium chromium-chromedriver

# 设置环境变量,强制pyppeteer使用系统安装的Chromium,避免自动下载
ENV PYPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser

# 安装requests_html库
RUN pip install requests_html

同时需要修改Python代码,添加无头模式及Docker适配参数(Docker容器无图形界面,必须启用无头模式):

from requests_html import HTMLSession

url = "examplesite"

session = HTMLSession()
r = session.get(url)
# 启用无头模式,添加沙箱禁用、共享内存限制禁用参数,适配Docker环境
r.html.render(
    sleep=1,
    headless=True,
    args=['--no-sandbox', '--disable-dev-shm-usage']
)
print(r.html.html)

方案2:推荐Docker环境友好的替代库

如果requests_html的配置仍有问题,可以考虑以下更适合容器环境的库:

Playwright

微软开发的自动化测试/网页抓取库,对Docker环境支持完善,API简洁直观,支持多浏览器:

  • Dockerfile配置:
FROM python:3.7-alpine3.13

# 安装依赖及Chromium
RUN apk add --no-cache chromium
RUN pip install playwright
# 安装Chromium浏览器二进制文件
RUN playwright install chromium
  • 示例代码:
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动无头Chromium,适配Docker环境
    browser = p.chromium.launch(
        headless=True,
        args=['--no-sandbox', '--disable-dev-shm-usage']
    )
    page = browser.new_page()
    page.goto("examplesite")
    # 获取页面渲染后的HTML内容
    print(page.content())
    browser.close()

Selenium

老牌网页自动化库,配合Chromedriver可实现JS渲染页面抓取,适合复杂交互场景:

  • Dockerfile配置:
FROM python:3.7-alpine3.13

RUN apk add --no-cache chromium chromium-chromedriver
RUN pip install selenium
  • 示例代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

driver = webdriver.Chrome(options=chrome_options)
driver.get("examplesite")
print(driver.page_source)
driver.quit()

内容的提问来源于stack exchange,提问作者MisterJAcobz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:16:05