我想从职位搜索网站上搜索所有职位名称和公司名称。但是我无法这样做,因为我认为我无法检查HTML代码中的正确元素。我已经研究了好几天,请为正确的HTML元素提供帮助和建议。一旦我能够检查正确的元素,就可以进行循环并完成该程序。感激。
Option Explicit
Sub xmlhttp_scarpping()
Dim XMLrequest As New MSXML2.XMLHTTP60
XMLrequest.Open "GET", "https://www.efinancialcareers.my/search/?countryCode=MY&radius=40&radiusUnit=km&page=1&pageSize=20¤cyCode=MYR&language=en0", False
XMLrequest.send
Dim iDOC As New MSHTML.HTMLDocument
iDOC.body.innerHTML = XMLrequest.responseText
'Cells(2, 2).Value = iDOC.getElementsByClassName("d-flex justify-content-between")(0).getElementsByTagName("h5")(0).getElementsByTagName("a")(0).innerText
'Cells(2, 2).Value = iDOC.getElementById("8091724").innerText
'Cells(2, 2).Value = iDOC.getElementsByClassName("search-card")(0).getElementsByClassName("d-flex justify-content-between")(0).getElementsByTagName("h5")(0).getElementsByTagName("a")(0).innerText
Range("H1").Value = "Time Updated on"
Range("I1").Value = Now
Columns.AutoFit
MsgBox "Done"
End Sub
下面的HTML代码示例:
答案 0 :(得分:0)
您尝试获取的页面使用JavaScript创建内容。但是,在您的代码中,iDOC
的innerHTML只是静态内容。
要使页面属性运行JavaScript,可以使用InternetExplorer.Application
自动执行IE。尝试使用诸如“使用VBA自动化Internet Explorer”之类的谷歌搜索关键字。
我阅读了您的评论。页面太快进入READY状态。因此,您应该等待内容以某种方式生成(例如,睡眠或检查是否出现了某些元素)。
Public Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
Sub sc2()
Dim objIE As New InternetExplorer
objIE.Visible = True
objIE.navigate "https://www.efinancialcareers.my/search/?countryCode=MY&radius=40&radiusUnit=km&page=1&pageSize=20¤cyCode=MYR&language=en0"
Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
DoEvents
Loop
Dim htmlDoc As HTMLDocument
' Wait long enough
Sleep 10000
' ... Or wait until some element appears (some element disappears)
' Do
' Set htmlDoc = objIE.document
'
' If htmlDoc.getElementsXXX Then
' Exit Do
' End If
'
' DoEvents
' Sleep 1000
' Loop
Set htmlDoc = objIE.document
' Then you can access elements
' ... but this code also has a problem. ``.getElementsByTagName("h5")`` returns nothing. Please inspect the html.
Debug.Print htmlDoc.getElementsByClassName("d-flex justify-content-between")(0).getElementsByTagName("h5")(0).getElementsByTagName("a")(0).innerText
End Sub
此外,访问元素的代码也有问题。由于它不跟随生成的html,因此.getElementsByTagName("h5")
不返回任何内容。请在Chrome的控制台或VBE的“监视”窗口中检查html。
== $0
与您的问题无关。它只是意味着开发人员工具中的活动DOM元素。 (What does == $0 mean in the DOM view in developer tools?)
顺便说一句,越来越多的网站正在放弃对IE的支持。使用InternetExplorer
对象很方便,但是使用Selenium自动化Chrome或Firefox是更好的方法。