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

使用Python Selenium无法定位网页游戏内元素的技术求助

解决Selenium无法定位Aviator游戏内元素的问题

可能的原因及解决方案

1. 游戏内容嵌入在iframe中

网页游戏通常会放在<iframe>标签内,Selenium默认在主页面DOM中查找元素,无法直接定位iframe内的元素。解决步骤:

  • 打开浏览器开发者工具(F12),在Elements面板搜索payouts-block,确认元素是否在某个<iframe>标签下。
  • 若存在iframe,先切换到该iframe再进行元素定位:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 等待iframe加载完成并切换(根据实际iframe属性调整选择器)
iframe = WebDriverWait(navegador, 20).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "iframe[src*='aviator']"))
)
navegador.switch_to.frame(iframe)

# 定位目标元素
payouts_block = WebDriverWait(navegador, 15).until(
    EC.presence_of_element_located((By.CLASS_NAME, "payouts-block"))
)
print(payouts_block.text)

2. 复合类名使用错误

By.CLASS_NAME仅支持单个类名,不能传入多个空格分隔的类名(如'amount font-family-number')。定位多类元素需用CSS选择器:

  • 错误写法:navegador.find_element(By.CLASS_NAME,'amount font-family-number')
  • 正确写法:navegador.find_element(By.CSS_SELECTOR,'.amount.font-family-number')(类名间用.连接,而非空格)

3. WebDriverWait参数格式错误

EC.element_to_be_clickable需接收元组(定位方式, 选择器),而非直接传字符串。修正写法:

# 若无需点击元素,用presence_of_element_located更合适
target_element = WebDriverWait(navegador, 15).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, ".number.font-family-number"))
)

4. 绝对XPath不可靠

你使用的绝对XPath(/html/body/app-root/...)极易因页面结构变化失效,建议改用相对XPath:

# 获取payouts-block下的所有子元素内容
payouts_children = WebDriverWait(navegador, 15).until(
    EC.presence_of_all_elements_located((By.XPATH, "//div[@class='payouts-block']//*"))
)
for element in payouts_children:
    print(element.text)

额外检查步骤

  • 确认登录后游戏页面已完全加载,可等待游戏内标志性元素出现后再开始定位。
  • 若元素为动态生成(如每轮游戏后更新),需确保在元素生成后执行定位操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:35:44