为Chrome.ahk类抓取相邻的div或span类。

问题描述 投票:2回答:1

我正试图创建一个脚本来抓取+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
    }   
}
autohotkey
1个回答
0
投票

谢谢Geekdude给我指出了正确的方向,用JS搜索并转换回ahk。

MsgBox, % PageInst.Evaluate("[].filter.call(document.querySelectorAll('span'), e=>e.innerText=='Modem MAC:')[0].nextSibling.querySelector('div').innerText").value
© www.soinside.com 2019 - 2024. All rights reserved.