使用requests_html的html.render()无法获取完整页面,无法提取content-repas元素
解决无法提取餐厅菜单content-repas元素的问题
问题原因
当前代码仅完成了页面渲染,但未等待动态内容完全加载,且直接打印响应对象r无法获取具体页面元素内容。目标菜单元素.content-repas由JavaScript动态生成,需确保页面渲染完成后再执行提取操作。
修复方案
- 增加渲染等待时间:给
render()方法添加sleep参数,让浏览器有足够时间加载动态内容 - 精准定位目标元素:使用
find()方法直接提取.content-repas元素,而非打印整个响应对象 - 可选:添加请求头模拟真实浏览器:部分网站会拦截非浏览器请求,可通过User-Agent伪装规避
修改后的代码
import requests_html url = 'https://www.crous-bordeaux.fr/restaurant/resto-u-pierre-bidart/' s = requests_html.HTMLSession() # 添加浏览器请求头伪装 s.headers.update({ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' }) r = s.get(url) # 延长等待时间,确保动态菜单加载完成 r.html.render(sleep=5) # 提取目标元素并输出内容 menu_container = r.html.find('.content-repas', first=True) if menu_container: print(menu_container.text) else: print("未找到content-repas元素")
额外排查方向
若仍无法提取元素,可能是网站存在反爬机制,可尝试:
- 在
render()中添加keep_page=True参数保留页面状态 - 查看并携带
r.html.session.cookies中的必要Cookie - 模拟页面滚动操作,触发动态内容加载
内容的提问来源于stack exchange,提问作者Arthur_Le_M
相关产品推荐
相关产品推荐

