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

如何用Python的Selenium获取网页JS游戏中的玩家数等数据?

解决Selenium获取浏览器游戏页面动态数据的问题

针对你遇到的问题,给你几个实用的解决方向:

  • 检查目标元素是否在iframe中
    很多网页游戏会把核心内容放在iframe里,Selenium默认只会在主页面上下文查找元素,根本碰不到iframe里的内容。先找到游戏对应的iframe,切换上下文后再定位元素:

    from selenium.webdriver.common.by import By
    
    # 定位游戏iframe(可根据实际src、id或class调整)
    game_iframe = driver.find_element(By.CSS_SELECTOR, "iframe[src*='TugTeamMultiplication']")
    # 切换到iframe内部
    driver.switch_to.frame(game_iframe)
    # 现在可以正常定位玩家数量、时间等元素
    player_count = driver.find_element(By.XPATH, "//*[contains(text(), 'Players')]").text
    # 操作完成后切回主页面
    driver.switch_to.default_content()
    
  • 放弃自动生成的绝对Xpath,用相对定位
    开发者工具复制的Xpath大多是绝对路径(比如/html/body/div[2]/div[3]...),页面结构稍微变一下就失效。换成基于元素特征的相对定位,比如根据文本、class属性:
    比如找玩家数,可写成//*[text()='Players Online:']/following-sibling::span,或者//div[contains(@class, 'player-counter')](具体要根据页面元素的实际属性调整)。

  • 用显式等待等待动态元素加载
    JS渲染的元素不会瞬间出现,直接定位肯定找不到。用Selenium的显式等待,等元素可见后再操作:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    wait = WebDriverWait(driver, 15)
    # 等待玩家数量元素可见,最多等15秒
    player_element = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[contains(text(), 'Players')]")))
    print(player_element.text)
    
  • 模拟点击后等待游戏界面加载
    点击「Play Game」后,游戏界面是异步渲染的,别着急立刻定位元素。点击后先等游戏内的关键元素出现:

    # 点击Play Game按钮
    play_btn = driver.find_element(By.XPATH, "//button[text()='Play Game']")
    play_btn.click()
    # 等待游戏界面加载完成,比如等玩家信息区域出现
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".player-info-area")))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:03:27