requests-html下载Chromium时报NoSuchKey错误,如何解决?
问题根源
requests-html 默认要下载的 Chromium 版本(1181205)已被谷歌快照仓库移除,导致下载失败,更换不同版本的 requests-html 也可能碰到相同问题——旧版 Chromium 快照会被定期清理。
解决办法
1. 调用本地已安装的 Chrome/Edge 浏览器
直接用电脑上已有的 Chrome 或 Edge 代替自动下载的 Chromium,无需额外下载文件,修改代码如下:
import requests from bs4 import BeautifulSoup from requests_html import HTMLSession url = "https://dmarket.com/ingame-items/item-list/csgo-skins?title=recoil%20case" # 示例:指定本地Chrome路径(替换成你自己的安装路径) session = HTMLSession( browser_args=["--no-sandbox", "--disable-dev-shm-usage"], executable_path="C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe" ) # 如果是Edge,路径一般是: # executable_path="C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" response = session.get(url) response.html.render() soup = BeautifulSoup(response.html.html, features="html.parser") print(soup)
2. 手动指定可用的 Chromium 版本
如果一定要用 requests-html 自带的 Chromium,先找一个仍存在的 Windows x64 版本号(可通过 Chromium 快照仓库查询),然后通过环境变量指定版本:
打开命令提示符执行:
set PYPPETEER_CHROMIUM_REVISION=1283080
执行完后再运行你的 Python 代码,程序会自动下载指定版本的 Chromium。
3. 替换为更稳定的 Selenium 库
requests-html 维护活跃度低,版本兼容问题频发,换成 Selenium 更可靠,代码示例:
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager url = "https://dmarket.com/ingame-items/item-list/csgo-skins?title=recoil%20case" # 自动匹配并安装对应版本的ChromeDriver driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(url) soup = BeautifulSoup(driver.page_source, features="html.parser") print(soup) driver.quit()
先安装依赖包:
pip install selenium webdriver-manager beautifulsoup4
内容的提问来源于stack exchange,提问作者Mihali George
相关产品推荐
相关产品推荐

