Excel 通过VBA中的嵌套标记名获取元素
我想获取网页链接和嵌套标记的元素:Excel 通过VBA中的嵌套标记名获取元素,excel,vba,Excel,Vba,我想获取网页链接和嵌套标记的元素: <a href='/cacti/graph.php?action=view&local_graph_id=279&rra_id=all'><img class='graphimage' id='graph_279' src='/cacti/graph_image.php?local_graph_id=279&rra_id=0&view_type=tree&grap
<a href='/cacti/graph.php?action=view&local_graph_id=279&rra_id=all'><img class='graphimage' id='graph_279' src='/cacti/graph_image.php?local_graph_id=279&rra_id=0&view_type=tree&graph_start=1482822537&graph_end=1482908937' border='0' alt='ARD-Besat-MKT450G - Bandwidth 16 Mb- ether3-Link to PTMP'></a>
我在VBA中的功能是:
Function WebPageLinks(internet, tagname As String)
Dim internetdata As HTMLDocument
Dim internetlink As Object
Dim internetinnerlink As Object
Set internetdata = internet.document
Set internetlink = internetdata.getElementsByTagName(tagname)
For Each internetinnerlink In internetlink
Sheets("Sheet1").Select
Sheets(1).Cells(linkcount, 1) = internetinnerlink.href' true
Sheets(1).Cells(linkcount, 2) = internetinnerlink.innerhtml' true
Sheets(1).Cells(linkcount, 3) =internetinnerlink.src ' error
Sheets(1).Cells(linkcount, 4) = internetinnerlink.alt' error
linkcount = linkcount + 1
Next internetinnerlink
End Function`
函数WebPageLinks2(internet,标记名为字符串,innerlinkcount)
将td设置为MSHTML.IHTMLElementCollection
Dim tr作为MSHTML.IHTMLElementCollection
将trObj设置为MSHTML.htmlgenericeElement
将tdObj设置为MSHTML.htmlgenericement
将标志变暗为布尔值
flag=False
Set tr=internet.document.getElementsByTagName(“a”)
对于tr中的每个trObj
Set td=trObj.getElementsByClassName(“图形图像”)
对于td中的每个tdObj
'对每个td对象执行某些操作'
如果(InStr(CStr(tdObj.alt),“Agg”)0或(InStr(CStr(tdObj.alt),“ether1”)0或(InStr(CStr(tdObj.alt),“ether1”)0),则
表(1).单元格(innerlinkcount,7)=tdObj.src
表(1).单元格(innerlinkcount,6)=tdObj.alt
'Debug.Print tdObj.alt
'Debug.Print tdObj.src
flag=True
调用SaveGraphimageFromURL(表(5)。单元格(17,3)。值,表(1)。单元格(innerlinkcount,7)。值_
ToPathOfImages&“\”和Sheets(1).单元格(innerlinkcount,1).值和工作表(1).单元格(innerlinkcount,3).值和工作表(1).单元格(innerlinkcount,6).值和“.png”_
表格(5)。单元格(18,3)。数值,表格(5)。单元格(19,3)。数值)
工作表(1).Hyperlinks.Add范围(“g”和innerlinkcount),hyperlinkAddress
退出
如果结束
下一个
如果InStr(trObj.href,“xport”)和标志
表(1).单元格(innerlinkcount,5)=trObj.href
flag=False
调用SaveGraphimageFromURL(表(5).单元格(17,3).值,表(1).单元格(innerlinkcount,5).值_
表格(5).单元格(20,3).数值和表格(1).单元格(innerlinkcount,1).数值和表格(1).单元格(innerlinkcount,3).数值和表格(1).单元格(innerlinkcount,6).数值和“.csv”_
表格(5)。单元格(18,3)。数值,表格(5)。单元格(19,3)。数值)
调用csvimport((表(5).单元格(20,3).值))
调用tahlil(innerlinkcount)
调用move_文件(CStr((表(5).Cells(20,3).Value)),CStr(ToPath))
'Debug.Print trObj.href
“Debug.Print”(调试打印)
退出
如果结束
下一个
根=根+1
端函数
问题究竟是什么?我不知道如何在innerhtml元素中添加元素:(问题只在于注释有错误的两行?这些行的预期结果是什么?您能否展示您将使用此元素类型的示例源代码?最后,我可以通过替换来解决:
Function WebPageLinks(internet, tagname As String)
Dim internetdata As HTMLDocument
Dim internetlink As Object
Dim internetinnerlink As Object
Set internetdata = internet.document
Set internetlink = internetdata.getElementsByTagName(tagname)
For Each internetinnerlink In internetlink
Sheets("Sheet1").Select
Sheets(1).Cells(linkcount, 1) = internetinnerlink.href' true
Sheets(1).Cells(linkcount, 2) = internetinnerlink.innerhtml' true
Sheets(1).Cells(linkcount, 3) =internetinnerlink.src ' error
Sheets(1).Cells(linkcount, 4) = internetinnerlink.alt' error
linkcount = linkcount + 1
Next internetinnerlink
End Function`
Function WebPageLinks2(internet, tagname As String, innerlinkcount)
Dim td As MSHTML.IHTMLElementCollection
Dim tr As MSHTML.IHTMLElementCollection
Dim trObj As MSHTML.HTMLGenericElement
Dim tdObj As MSHTML.HTMLGenericElement
Dim flag As Boolean
flag = False
Set tr = internet.document.getElementsByTagName("a")
For Each trObj In tr
Set td = trObj.getElementsByClassName("graphimage")
For Each tdObj In td
'do something with each td object'
If (InStr(CStr(tdObj.alt), "Agg") <> 0) Or (InStr(CStr(tdObj.alt), "ether1") <> 0) Or (InStr(CStr(tdObj.alt), "Ether1") <> 0) Then
Sheets(1).Cells(innerlinkcount, 7) = tdObj.src
Sheets(1).Cells(innerlinkcount, 6) = tdObj.alt
'Debug.Print tdObj.alt
'Debug.Print tdObj.src
flag = True
Call SaveGraphImageFromURLs(Sheets(5).Cells(17, 3).Value, Sheets(1).Cells(innerlinkcount, 7).Value, _
ToPathOfImages & "\" & Sheets(1).Cells(innerlinkcount, 1).Value & Sheets(1).Cells(innerlinkcount, 3).Value & Sheets(1).Cells(innerlinkcount, 6).Value & ".png", _
Sheets(5).Cells(18, 3).Value, Sheets(5).Cells(19, 3).Value)
Sheets(1).Hyperlinks.Add Range("g" & innerlinkcount), hyperlinkAddress
Exit For
End If
Next
If InStr(trObj.href, "xport") And flag Then
Sheets(1).Cells(innerlinkcount, 5) = trObj.href
flag = False
Call SaveGraphImageFromURLs(Sheets(5).Cells(17, 3).Value, Sheets(1).Cells(innerlinkcount, 5).Value, _
Sheets(5).Cells(20, 3).Value & Sheets(1).Cells(innerlinkcount, 1).Value & Sheets(1).Cells(innerlinkcount, 3).Value & Sheets(1).Cells(innerlinkcount, 6).Value & ".csv", _
Sheets(5).Cells(18, 3).Value, Sheets(5).Cells(19, 3).Value)
Call csvimport((Sheets(5).Cells(20, 3).Value))
Call tahlil(innerlinkcount)
Call move_files(CStr((Sheets(5).Cells(20, 3).Value)), CStr(ToPath))
'Debug.Print trObj.href
'Debug.Print " \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"
Exit For
End If
Next
root = root + 1
End Function