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

使用requests-html获取kahoot.it页面元素失败求助

解决Kahoot机器人requests-html无法获取动态加载元素的问题

我来帮你排查这个问题!首先看你的代码和描述,发现一个小细节:你说要找的是#game-pin元素,但代码里写的是#game-input,这大概率是个笔误,先确认这个选择器是否正确——毕竟如果选择器错了,再怎么渲染也找不到元素。

接下来,即使调用了render(),页面可能还没完全加载完成,requests-html的默认渲染时间可能不够。咱们可以通过几个方式优化:

1. 修正选择器并增加渲染等待时间

修改render()的sleep参数,给页面更多时间加载JavaScript内容,同时纠正选择器:

import requests_html

session = requests_html.HTMLSession()

# 设置更贴近真实浏览器的User-Agent,避免被反爬检测
session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'

r = session.get('https://kahoot.it/')

# 增加sleep时间,确保页面完全加载
r.html.render(sleep=3)

# 修正选择器为#game-pin(根据你的描述)
elem = r.html.find('#game-pin', first=True)

print(elem)

2. 等待特定元素加载后再获取

如果还是不行,可以用render()的wait参数,指定等待某个元素出现后再停止渲染:

r.html.render(wait='document.querySelector("#game-pin") !== null', sleep=2)
elem = r.html.find('#game-pin', first=True)

这个方式会让页面一直等待,直到#game-pin元素存在为止,比固定sleep更可靠。

3. 检查页面结构是否变化

如果以上都没用,可能是Kahoot的页面结构更新了。你可以先渲染页面后导出HTML看看实际结构:

with open('kahoot_page.html', 'w', encoding='utf-8') as f:
    f.write(r.html.html)

打开生成的HTML文件,搜索游戏PIN输入框的实际ID或类名,再调整选择器。

另外,注意requests-html基于Pyppeteer,第一次运行会下载Chromium,确保网络正常,后续运行会快很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:45:38