Kính nhờ hỗ trợ code lấy dữ liệu từ website Eport tra cứu thông tin container về Excel

Liên hệ QC

randaubienghoc

Thành viên mới
Tham gia
28/1/13
Bài viết
25
Được thích
1
Anh/ chị diễn đàn GPE thân mến,

Trước đây (từ tháng 03/2021 về trước) em vẫn sử dụng file đính kèm lấy dữ liệu tra cứu vị trí container về Excel phục vụ công việc xuất nhập khẩu.
Nhưng sau khi có thông báo cập nhật mới: Địa chỉ web bị thay đổi thành: https://eport.saigonnewport.com.vn/ContainerInformation đồng thời khi truy cập bằng IE bị lỗi không hiển thị đầy đủ để có thể tra cứu (không có ô điền số container) & không thấy luôn nút Tìm kiếm khi mở bằng IE.
Do khả năng hạn chế, em đã không còn tìm ra cách lấy dữ liệu về được nữa.

Rất mong nhận được hỗ trợ từ các anh/ chị trên diễn đàn. Em xin được có khoản ủng hộ cảm ơn mọi người hỗ trợ sau khi hoàn thành ạ.

Mã:
Sub PullDataFromWeb()
  Dim IE As Object, W As Excel.Worksheet
  Dim doc As HTMLDocument
  Dim lastRow As Integer, b As Boolean, tmp As String
  Dim lis, li
  Set W = ThisWorkbook.Sheets("Sheet1")
  Set IE = VBA.CreateObject("InternetExplorer.Application")
  IE.Visible = False   'hien cua so IE
  IE.navigate "https://eport.saigonnewport.com.vn/Pages/Common/Containers_new"
  Do While IE.Busy Or IE.readyState <> 4      'doi IE chay xong
    Application.Wait DateAdd("s", 1, Now)
  Loop
  Set doc = IE.document

  lastRow = W.Range("B" & W.UsedRange.Rows.Count + 2).End(xlUp).Row        'dong cuoi cung trong cot B container
  If lastRow < 2 Then GoTo Ends
  On Error Resume Next
  For intRow = 2 To lastRow     'tu dong toi dong
    b = False
    b = W.Range("I" & intRow).Value Like "[Yy]"
    If W.Range("B" & intRow).Value <> "" And Not b Then
      doc.getElementById("txtItemNo_I").Value = W.Range("B" & intRow).Value 'so cont
      doc.getElementById("cbSite_VI").Value = W.Range("A" & intRow).Value
      doc.getElementById("chkInYard_I").Checked = False
      doc.getElementById("ContentPlaceHolder2_btnSearch").Click 'click Search
      '----------------------------------------------
      Do While IE.Busy Or IE.readyState <> 4
        Application.Wait DateAdd("s", 1, Now)
      Loop
      '----------------------------------------------
      strFindContainer = ""
      strFindContainer = doc.getElementById("ContentPlaceHolder2_lblNotice").innerText
      W.Range("H" & intRow) = strFindContainer
      If strFindContainer Like "T*m th*y * container*" Then
        With W.Range("C" & intRow)
          .Value = doc.getElementById("grdContainer_DXDataRow0").Cells(0).innerText     'Eventtime1
          .Offset(, 1).Value = doc.getElementById("grdContainer_DXDataRow0").Cells(1).innerText     'Eventtype1
          .Offset(, 2).Value = doc.getElementById("grdContainer_DXDataRow0").Cells(2).innerText     'Location1
          .Offset(, 3).Value = doc.getElementById("grdContainer_DXDataRow1").Cells(0).innerText     'Eventtime2
          .Offset(, 4).Value = doc.getElementById("grdContainer_DXDataRow1").Cells(1).innerText     'Eventype2
        End With
      End If
    End If
  Next
Ends:
  IE.Quit
  Set IE = Nothing    'Cleaning up
  Set objElement = Nothing
  Set objCollection = Nothing
  Application.StatusBar = ""
  Application.DisplayAlerts = True
 
Application.ScreenUpdating = True
MsgBox "EPORT UPDATED!"

End Sub
Bài đã được tự động gộp:

Cách tra cứu thông tin container:
1. Truy cập website: https://eport.saigonnewport.com.vn/ContainerInformation
2. Khu vực giao nhận container: chọn Cát Lái (CTL)
3. Container: điền số container (có thể tra cứu nhiều container)
4. Bấm nút Tìm kiếm
Và lấy dữ liệu container tra cứu được ở bảng bên dưới (cần lấy thông tin: 0-"Tìm thấy .... container", 1-Thời gian, 2-Tác nghiệp, 3-Vị trí, 4-Thời gian vào cảng, 5-Thời gian ra cảng, 6-Nhập/ Xuất)
 

File đính kèm

  • PULL-DATA-FROM-WEB.xlsm
    26.2 KB · Đọc: 36
Lần chỉnh sửa cuối:
Ông Cảng SG này lập trình Web bị sót với IE. Nếu họ còn phát triển cho IE thì đơn vị bạn cũng nên phản ảnh để người ta sửa. Có thế thì code mới chạy được.
 
Upvote 0
Sao không ngâm cứu dùng WinHTTP, XMLHttp nhỉ.
 
Upvote 0
Ngâm cứu API của người ta mới đúng bài chứ.
Scrape web thì cái đầu tiên phải nghĩ tới là API, bí quá mới nghĩ tới cái khác.

Trang kia có API rất ngon lành đó.

1620269461727.png
 
Upvote 0

@randaubienghoc



Sửa các cột giá trị:
a = array("CONTAINER_GROSS", "ITEM_KEY", "EVENT_TIME", "EVENT_TYPE", "IN_YARD", "SITE", "CONTAINERNO", "FEL", "ISO", "GROSS", "VGM", "CATEGORY", "STACK", "TEMP", "CUST", "LOAD_TO_VESSEL", "POD_DESTINATION", "LOCATION", "TRUCK_VESSEL", "TRANS_IN", "TRANS_OUT", "GATE_WT", "GATE_GROSS_WT", "LINE_OPER", "IM_EXP", "BILL_BOOK", "MANIFEST_WT", "TARE_WT", "CUST_APPROVAL_DATE", "NOTE", "HAZ", "ITEM_SEAL_NO", "CUSTOM_CLEARANCE_STATUS")

Nếu bạn muốn nhận 4 cột, muốn cột nào thì lấy tên ở trên điền vô và đặt nó bên dưới dòng tương tự ở trên:
a = array("...", "...", "...", "...")


Nếu sử dụng bất động bộ thì sẽ nhanh hơn khi, có nhiều Khu vực giao nhận container. Nhưng ở file dưới không được viết ở cơ chế này.
 

File đính kèm

  • PULL-DATA-FROM-WEB.xlsm
    51 KB · Đọc: 35
Lần chỉnh sửa cuối:
Upvote 0
Không biết randaubienghoc có ham chơi không mà chẳng thấy phản hồi bài #10 để anh em xem còn rút kinh nghiệm.

Cái Selenium tôi cũng đã làm xong. Mò mẫm mãi vì thứ gì cũng mới.
 
Upvote 0
Web KT
Back
Top Bottom