khongnhienttt
Thành viên hoạt động
- Tham gia
- 15/7/15
- Bài viết
- 137
- Được thích
- 33
Nhờ ACE chỉ dẫn giúp cách sử dụng đối tượng HTMLDocument (CreateObject("HTMLFile")), trong bài toán về việc lấy dữ liệu từ internet, nếu ta dùng InternetExplorer hoặc Selenium thì khi khởi động trình duyệt rất chậm, vì vậy mình dùng XMLHTTP60 (CreateObject("MSXML2.XMLHTTP")), dùng XMLHTTP60 thì mình có thể lấy được source của trang web và từ đó tách chuỗi để lấy nội dung, nhưng làm như thế rất thủ công nên mình add source đó vào HTMLDocument để tận dụng các phương thức getElementById, getElementByClass, getElementBytagName lấy chính xác nội dung cần lấy, tuy nhiên lỗi xảy ra là khi debug code bên dưới trong Immediate windows
1. khi mình gõ: ?http.responseText thì nó hiện toàn bộ source của trang web
2. Nhưng khi mình gán html.body.innerHTML = http.responseText, và mình gõ ?html.body.innerHTML thì lại ra 1 dòng trống
3. và code báo lỗi ngay dòng: Set elem = html.getElementsByClassName("ctr-p") ' Do không tìm thấy phương thức getElementsByClassName trong đối tượng HTMLDocument
Nhờ ACE giúp đỡ, mình cám ơn rất nhiều.
1. khi mình gõ: ?http.responseText thì nó hiện toàn bộ source của trang web
2. Nhưng khi mình gán html.body.innerHTML = http.responseText, và mình gõ ?html.body.innerHTML thì lại ra 1 dòng trống
3. và code báo lỗi ngay dòng: Set elem = html.getElementsByClassName("ctr-p") ' Do không tìm thấy phương thức getElementsByClassName trong đối tượng HTMLDocument
Nhờ ACE giúp đỡ, mình cám ơn rất nhiều.
Mã:
Sub google()
Const url = "https://www.google.co.in"
Set http = CreateObject("MSXML2.XMLHTTP")
Set html = CreateObject("HTMLFile")
http.Open "GET", url, False
http.Send
html.body.innerHTML = http.responseText
Dim elem As Object
Set elem = html.getElementsByClassName("ctr-p") ' HTMLElementCollection
Debug.Print elem.Length
Set elem = html.getElementsByClassName("ctr-p")("viewport") ' HTMLDivElement <div class="ctr-p" id="viewport">
Debug.Print elem.Children.Length
Dim aaa As Object
Set aaa = elem.getElementsByTagName("div")("hplogo") ' HTMLDivElement
Debug.Print aaa.Children.Length
Debug.Print aaa.outerHTML
End Sub