Python使用Selenium WebDriver获取元素文本为空的问题排查
问题根源
你定位到的是<input>表单元素,这类元素的展示内容存放在value属性中,并非元素的text节点,直接调用.text只能拿到空值。另外你第一次执行取值后就把结果存在了静态变量msg里,DOM更新后这个变量不会自动同步最新值,自然看不到走棋后的提示变化。
修复方法
- 替换旧版的
find_element_by_css_selector定位写法,改用Selenium当前版本支持的By定位器,避免版本兼容报错 - 读取输入框内容时,调用
get_attribute("value")获取提示文本,不要用.text - 需要获取最新状态时,重新执行属性读取操作,不要复用首次存储的静态变量值
修复后参考代码
from selenium import webdriver from selenium.webdriver.common.by import By import time driver = webdriver.Chrome("./chromedriver") driver.get("目标Hex游戏站点地址") # 定位状态提示输入框 msgbox = driver.find_element(By.CSS_SELECTOR, "body > div > form > table > tbody > tr > td:nth-child(5) > table > tbody > tr:nth-child(9) > td > table > tbody > tr:nth-child(3) > td > input") # 读取初始提示 msg = msgbox.get_attribute("value") print(msg) # 正常输出初始状态:Red to move. # 执行走棋操作后,重新读取value即可获取最新提示 # 下方sleep替换为实际的走棋操作逻辑 time.sleep(3) updated_msg = msgbox.get_attribute("value") print(updated_msg) # 输出走棋后更新的状态,比如胜负提示、下一步轮到哪方
补充提示:只要页面没有刷新、元素没有被销毁,已经定位到的
msgbox对象可以重复使用,不需要每次取值都重新定位元素。如果需要实时监听状态变化,可以写定时轮询逻辑重复读取value属性,检测到值变化时触发对应处理即可。
内容的提问来源于stack exchange,提问作者SH Chen
相关产品推荐
相关产品推荐

