Python抓取TypeRacer打字测试结果无输出问题排查求助
问题排查及解决方案
问题原因
- 你要提取的
div.replayWord元素是页面加载完成后通过JavaScript动态渲染生成的,requests库只能获取未执行JS的初始静态HTML,返回的内容中不存在对应元素,因此没有输出。 - 你可以在原有代码中添加
print(page.text),搜索返回的文本内容,验证是否存在replayWord相关标签。
解决方法
推荐使用支持JavaScript渲染的工具抓取,以下是Selenium的示例实现:
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options import time # 配置浏览器参数 chrome_options = Options() chrome_options.add_argument("--headless=new") # 无头模式,不弹出浏览器窗口 chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36") n = 798 url = f"https://data.typeracer.com/pit/result?id=|tr:_cephas_|{n}" driver = webdriver.Chrome(options=chrome_options) driver.get(url) time.sleep(2) # 等待页面渲染完成,可替换为显式等待提升稳定性 soup = BeautifulSoup(driver.page_source, 'lxml') for item in soup.select("div.replayWord"): print(item.get_text(strip=True)) driver.quit()
优化建议
- 可将固定等待的
time.sleep(2)替换为Selenium显式等待,指定等待div.replayWord元素加载完成再解析,避免网络波动导致抓取失败。 - 也可以通过浏览器开发者工具的网络面板,找到返回打字数据的后端接口,直接请求接口获取结构化数据,无需渲染整个页面,效率更高。
内容的提问来源于stack exchange,提问作者Keba Sarah
相关产品推荐
相关产品推荐

