如何使用Python爬虫提取10fastfingers平台的个人打字测试数据
问题原因
你使用requests+bs4无法获取测试后数据的核心原因是:10fastfingers的打字测试结果属于页面加载完成后通过JavaScript动态渲染的内容,requests只能拉取到初始的静态页面源码,不会执行页面的JS逻辑,自然无法获取到测试结束后才生成的打字速度、准确率这类动态数据。
实现方案
推荐优先使用Selenium自动化工具实现,它可以模拟真实浏览器的操作、执行页面JS逻辑,能直接获取渲染完成后的全量页面内容,对有Python基础的开发者来说上手门槛很低。
步骤1:安装依赖
首先安装需要的工具:
- 安装selenium库:
pip install selenium - 新版Selenium支持ChromeDriver自动管理,无需手动下载对应浏览器版本的驱动文件
步骤2:核心实现代码
你可以选择手动完成打字测试后再提取数据,也可以直接用Selenium全流程模拟打字+提取,以下是核心代码示例:
from selenium import webdriver from selenium.webdriver.common.by import By import time import pandas as pd # 初始化Chrome浏览器 driver = webdriver.Chrome() # 打开英文打字测试页面 driver.get("https://10fastfingers.com/typing-test/english/") # 预留时间完成打字测试,默认测试时长为60秒,可根据自身需求调整时长 time.sleep(70) # 提取测试结果,元素ID可通过浏览器F12开发者工具的元素选择器确认 result = { "打字速度(WPM)": driver.find_element(By.ID, "wpm").text.strip(), "准确率": driver.find_element(By.ID, "accuracy").text.strip(), "总击键数": driver.find_element(By.ID, "keystrokes").text.strip(), "正确单词数": driver.find_element(By.ID, "correct").text.strip(), "错误单词数": driver.find_element(By.ID, "wrong").text.strip() } # 打印结果或存入本地表格 print(result) pd.DataFrame([result]).to_csv("typing_test_result.csv", index=False, encoding="utf-8-sig") # 关闭浏览器 driver.quit()
优化方案(可选)
如果不想使用自动化工具,也可以通过抓包的方式直接获取结构化数据:完成测试后打开浏览器F12开发者工具的「网络」面板,找到提交测试结果的POST接口,用requests模拟请求该接口即可直接拿到JSON格式的测试数据,运行效率更高,但需要掌握基础的抓包技能。
内容的提问来源于stack exchange,提问作者mahen2
相关产品推荐
相关产品推荐

