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

如何获取dojoxGridCell的值?AutoHotkey实现遇阻求助

解决AutoHotkey获取dojoxGridCell值的问题

我之前也踩过用AHK操作Dojo网格获取单元格值的坑,结合你的场景(AutoHotkey Unicode 64位v1.1.25.01 + IE控制),给你几个实操方向:

1. 先确保Dojo网格完全初始化

你当前的代码只等待了IE的ReadyState=4,但Dojo组件是异步加载渲染的,必须等网格实例就绪才能操作。可以加个循环检查:

#Persistent 
#SingleInstance, force 
SetTitleMatchMode, 2 

ie := ComObjCreate("InternetExplorer.Application") 
ie.Visible := 1 
ie.Navigate("https://tmpa-fnsb.hs.mdmgr.net:8445") 

; 等待IE加载完成
While (ie.Busy || ie.ReadyState != 4)
    Sleep 100

; 额外等待Dojo网格初始化(假设网格id为"grid",根据实际修改)
While True {
    try {
        ; 通过Dojo API获取网格实例
        gridInstance := ie.document.parentWindow.Dojo.byId("grid")
        if (gridInstance)
            break
    }
    catch {
        ; 初始化前会报错,忽略继续等待
    }
    Sleep 500
}

2. 用Dojo原生API获取单元格值(推荐)

dojox.Grid的数据存在底层store里,直接通过API获取比解析DOM更可靠,不会受渲染格式影响:

; 假设要获取第0行、field为"username"的列的值(替换成你的列field名)
store := gridInstance.store
targetItem := gridInstance.getItem(0)  ; 获取第0行的数据项
cellValue := store.getValue(targetItem, "username")

MsgBox, 获取到的单元格值:%cellValue%

如果不知道列的field名,可以先在浏览器控制台执行以下代码查看:

var grid = dojo.byId("grid");
console.log(grid.layout.cells);  ; 打印所有列的配置,包含field属性

3. 从DOM结构解析单元格文本(备选方案)

如果实在无法用Dojo API,也可以直接遍历DOM元素获取渲染后的文本:

; 获取所有网格行
gridRows := ie.document.getElementsByClassName("dojoxGridRow")
if (gridRows.Length > 0) {
    ; 获取第一行的所有单元格
    rowCells := gridRows[0].getElementsByClassName("dojoxGridCell")
    if (rowCells.Length > 0) {
        ; 获取第一列(索引0)的文本,根据需求修改索引
        cellText := rowCells[0].innerText
        MsgBox, 单元格文本:%cellText%
    }
}

注意事项

  • 不同版本的Dojo API可能有差异,比如部分版本用store.get(item, field)代替store.getValue,建议先在浏览器控制台测试代码可行性
  • 如果页面包含iframe,需要先定位到对应的iframe文档再操作
  • 确保IE的安全设置允许脚本执行,否则AHK无法调用Dojo的API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:32:45