我正试图创建一个脚本来抓取+1或下一个SPANDIV元素的文本内容,我正在使用AHK和Chrome.Ahk类来帮助chrome上的web scrape。我正在使用AHK和Chrome.Ahk类来帮助chrome上的web scrape。我想出了如何在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代码翻译成chrome类 我读到的是JS语法。我如何抓取字面上的下一个SPAN类,或者像chrome显示的那样抓取一个div。
EDIT:
我终于能够弄清楚如何通过每个元素循环。但是仍然无法得到我想要的结果。但这是我想到的循环。有人有什么进一步的想法吗?
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
}
}
谢谢Geekdude给我指出了正确的方向,用JS搜索并转换回ahk。
MsgBox, % PageInst.Evaluate("[].filter.call(document.querySelectorAll('span'), e=>e.innerText=='Modem MAC:')[0].nextSibling.querySelector('div').innerText").value