【发布时间】:2020-09-03 14:40:12
【问题描述】:
我正在尝试创建一个脚本来获取 +1 或下一个 SPAN/DIV 元素的文本内容。我正在使用 AHK 和 Chrome.Ahk 类来帮助在 chrome 上进行网络抓取。我想出了如何在 IE DOM 中做我想要的,但是在将其转换为 chrome 时遇到了麻烦。
这是我在 IE DOM 中工作的脚本,它正在抓取下一个元素。
All:=WB.Document.GetElementsByTagName("Span") ;Get Tagname and Array value
while(aa:=All.Item[A_Index-1]){
if(aa.InnerText="Modem MAC:"){ ;*[Grab Info from Gateway]
msgbox % aa.ParentNode.GetElementsByTagName("Span").Item[1].InnerText
}
}
这是我的 Chrome 脚本,它抓取第一个元素;或者,我搜索的元素:
PageInst.Evaluate("document.getElementsByTagName('Span').textContent='Modem MAC:'"))
我很困惑如何将我的 IE DOM 代码转换为我阅读时需要采用 JS 语法的 chrome 类。我如何从字面上抓取下一个 SPAN 类或 chrome 将其显示为 div。
编辑:
我终于能够弄清楚如何循环遍历每个元素。但仍然无法获得我想要的结果。但这是我想出的循环。大家还有什么想法吗?
while(PageInst.Evaluate("document.getElementsByTagName('div')['" A_Index "']")){
msgbox % PageInst.Evaluate("document.getElementsByTagName('div')['" A_Index "'].textContent").Value
}
编辑#2:在解决这个问题一周后,我已经非常接近了,但我认为我的语法有点错误。下面的代码适用于 IE
WB := WBGet()
while(WB.Document.GetElementsByTagName("Span").Item[A_Index-1]){
if(WB.Document.GetElementsByTagName("Span").Item[A_Index-1].InnerText="Modem MAC:"){ ;*[Grab Info from Gateway]
msgbox % WB.Document.GetElementsByTagName("Span").Item[A_Index-1].nextSibling.GetElementsByTagName("Div")[0].innerText
}
}
这是我改变语法的尝试,可以用另一双眼睛作为我翻译不正确的东西吗?
Tab:=PageInst
while(Tab.Evaluate("document.getElementsByTagName('Span')['" A_Index "']")){
if(Tab.Evaluate("document.getElementsByTagName('Span')['" A_Index "'].innerText='Modem MAC:'")){
msgbox % Tab.Evaluate("document.getElementsByTagName('Span')['" A_Index "'].nextSibling.getElementsByTagName('Div')[0].innerText").Value
}
}
【问题讨论】:
标签: autohotkey