Tôi đã chơi xung quanh bằng cách cào dữ liệu từ các trang web bằng VBS/VBA.Sử dụng getElementById trên HTMLElement thay vì HTMLDocument
Nếu đó là Javascript tôi muốn được đi như dễ dàng của nó, nhưng nó không có vẻ là khá thẳng về phía trước trong VBS/VBA.
Đây là ví dụ tôi đưa ra câu trả lời, nó hoạt động nhưng tôi đã lên kế hoạch truy cập các nút con bằng cách sử dụng getElementByTagName
nhưng tôi không thể tìm ra cách sử dụng chúng! Đối tượng HTMLElement
không có các phương thức đó.
Sub Scrape()
Dim Browser As InternetExplorer
Dim Document As HTMLDocument
Dim Elements As IHTMLElementCollection
Dim Element As IHTMLElement
Set Browser = New InternetExplorer
Browser.navigate "http://www.hsbc.com/about-hsbc/leadership"
Do While Browser.Busy And Not Browser.readyState = READYSTATE_COMPLETE
DoEvents
Loop
Set Document = Browser.Document
Set Elements = Document.getElementsByClassName("profile-col1")
For Each Element in Elements
Debug.Print "[ name] " & Trim(Element.Children(1).Children(0).innerText)
Debug.Print "[ title] " & Trim(Element.Children(1).Children(1).innerText)
Next Element
Set Document = Nothing
Set Browser = Nothing
End Sub
Tôi đã được nhìn vào HTMLElement.document
tài sản, nhìn thấy nếu nó giống như một mảnh của tài liệu nhưng nó hoặc là khó khăn để làm việc với hoặc chỉ isnt những gì tôi nghĩ
Dim Fragment As HTMLDocument
Set Element = Document.getElementById("example") ' This works
Set Fragment = Element.document ' This doesn't
cũng này có vẻ dài quanh co cách để làm điều đó (mặc dù thats thường là cách cho vba imo). Bất cứ ai cũng biết nếu có một cách đơn giản hơn để chuỗi chức năng?
Document.getElementById("target").getElementsByTagName("tr")
sẽ là tuyệt vời ...
Tôi sẽ thử, tương tự, điều hướng đến trang của tôi điều hướng đến url 'javascript:'. đã làm việc, nhưng không tốt lắm. Bạn có biết nếu 'Document.parentWindow.ExecScript' đang chặn không? hoặc có thể kịch bản của tôi không hoàn thành thực thi trước khi kết quả được thiết lập? (cũng sẽ tự kiểm tra). Tôi vẫn muốn biết nếu có một cách để làm điều đó hoàn toàn với VB mặc dù! – NickSlash
Đó không phải là để nói querySelector sẽ không làm việc với các dll IE9 +, tôi chỉ không thử nghiệm những người – mkingston
@NickSlash Tôi đã chỉnh sửa câu trả lời của tôi để trả lời bình luận của bạn. Đối với chặn, tôi nghĩ như vậy, nhưng tôi không chắc chắn. Nên khá dễ dàng để kiểm tra (vài vòng lồng nhau đếm đến 2^31 hoặc bất kỳ số nguyên tối đa là trong JS). – mkingston