如何用Python Requests与bs4获取Krunker.io玩家等级数据?
问题分析
krunker.io的社交页面是动态渲染的,你用requests请求只能拿到页面的初始静态HTML,而玩家等级这类数据是通过JavaScript异步加载后生成DOM元素的,所以直接用BeautifulSoup解析静态HTML找不到目标元素。
解决方案:用Selenium模拟浏览器加载动态内容
Selenium可以模拟真实浏览器的行为,等页面JavaScript执行完成后再解析DOM,就能获取到动态生成的等级元素。
修改后的代码示例
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from fake_useragent import UserAgent url = "https://krunker.io/social.html?p=profile&q=Dragon" # 配置Chrome浏览器选项,使用随机User-Agent user_agent = UserAgent() options = webdriver.ChromeOptions() options.add_argument(f'user-agent={user_agent.random}') # 可选:启用无头模式(不显示浏览器窗口) # options.add_argument('--headless=new') # 初始化浏览器 driver = webdriver.Chrome(options=options) driver.get(url) try: # 等待目标元素加载完成(最多等待10秒) level_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'div.statTabB0 strong')) ) # 获取等级文本 level_text = level_element.text print(f"玩家等级:{level_text}") except Exception as e: # 检查是否出现验证码 captcha = driver.find_elements(By.CSS_SELECTOR, 'div.captcha') if captcha: print("检测到验证码,请手动处理或接入验证码识别服务") else: print(f"无法获取等级:{str(e)}") finally: # 关闭浏览器 driver.quit()
关键说明
- 动态内容加载:Selenium会等待页面JS执行完毕,确保目标元素生成后再定位,解决静态请求拿不到数据的问题。
- 元素定位:如果
div.statTabB0 strong不是等级的准确选择器,你可以在浏览器按F12,找到等级元素的实际CSS选择器或XPath替换进去。 - 验证码处理:如果页面触发验证码,需要手动处理或集成第三方验证码识别工具。
- 依赖安装:执行
pip install selenium安装依赖,同时要确保ChromeDriver版本与本地Chrome浏览器版本匹配。
替代方案:调用官方API(推荐)
krunker大概率有公开API接口,直接请求API获取玩家数据比爬页面更稳定高效。比如可以尝试请求类似https://krunker.io/api/social?profile=Dragon的接口(具体接口需自行验证),返回的JSON数据里会直接包含等级等信息。
内容的提问来源于stack exchange,提问作者Origin Spitfire
相关产品推荐
相关产品推荐

