使用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
相关产品推荐
相关产品推荐

