Điều khiển Chrome, Chromium Edge, Cốc Cốc, FireFox ... bằng VBA

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,609
Được thích
4,039
Giới tính
Nam
Hôm nay tôi sẽ hướng dẫn các bạn cách điều khiển một trình duyệt hoạt động dựa vào nhân Chromium.

Cài đặt:
1. SeleniumBasic

2. Tải Chromedriver.exe sao chép vào thư mục: SeleniumBasic đã cài đặt
Thường thì đường dẫn là C:\Users\xxxxxxxxxxx\AppData\Local\SeleniumBasic

Để cập nhật Chromedriver.exe tự động có thể sử dụng Code sau:

Đặt đường dẫn Chrome trước khi cập nhật:

Thường thì C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

JavaScript:
#If VBA7 Then
     Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
  (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
  ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#Else
     Public Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
  (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
  ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#End If

Sub btn_UpdateChromedriver()
  Debug.Print UpdateChromedriver
End Sub
Function UpdateChromedriver(Optional ByVal chromePath As String = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe") As Boolean
  On Error Resume Next
  Dim LastedUpdate As String
  Dim FSO As Object, SEPath$
  Set FSO = VBA.CreateObject("Scripting.FileSystemObject")
  Dim XMLHTTP As Object
  Dim a, Tmp1$, Tmp$, eURL$, Temp$, Info$
  Const LATEST_RELEASE = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE"
  Const URL$ = "https://chromedriver.storage.googleapis.com/"

  Const EXE$ = "\chromedriver.exe"
  Const ZIP$ = "\chromedriver_win32.zip"
  SEPath$ = Environ$("USERPROFILE") & "\AppData\Local\SeleniumBasic"
  Temp = Environ("TEMP"): GoSub DelTemp
  If Not FSO.FileExists(chromePath) Then Exit Function
  Info = FSO.GetFileVersion(chromePath)
  eURL = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_" & Split(Info, ".")(0)
  GoSub http
  LastedUpdate = VBA.GetSetting("Chromedriver", "Update", "Last")
  If LastedUpdate < Tmp Then
    GoSub Download
  End If
Ends: Set FSO = Nothing
Exit Function
Download:
On Error Resume Next
  eURL = URL$ & Tmp & "/chromedriver_win32.zip"
  If URLDownloadToFile(0, eURL, Temp & ZIP, 0, 0) = 0 Then
    GoSub Extract
    Call VBA.SaveSetting("Chromedriver", "Update", "Last", Tmp)
  End If
On Error GoTo 0
Return
Extract:
On Error Resume Next
With VBA.CreateObject("Shell.Application")
  .Namespace(Temp & "\").CopyHere .Namespace(Temp & ZIP).Items
End With
With FSO
  If .FileExists(Temp & EXE) Then
    If .FolderExists(SEPath) Then FSO.CopyFile Temp & EXE, SEPath & EXE, True
  End If
  UpdateChromedriver = Err.Number = 0
End With
On Error GoTo 0
GoSub DelTemp
Return

DelTemp:
On Error Resume Next
  FSO.DeleteFile Temp & ZIP
  FSO.DeleteFile Temp & EXE
On Error GoTo 0
Return
http:
Set XMLHTTP = VBA.CreateObject("MSXML2.XMLHTTP.6.0")
With XMLHTTP
  .Open "GET", eURL, False
  .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
  .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
  .Send
  Tmp = VBA.Trim(Application.Clean(.responseText))
End With
Return
End Function
-------------------------------------------------



Bước tiếp theo là Mở kết nối đến chrome:


Dưới đây là một thủ tục kiểm tra và mở kết nối và kết nối phiên cũ của Chrome
Thủ tục Chrome_SE có nhiều tham số:

  1. Optional ByRef Driver As selenium.WebDriver: Lớp đối tượng chính Webdriver để kết nối
  2. Optional ByRef boolStart As Boolean: Đối số trả ngược xem Chrome đã khởi động chưa
  3. Optional ByVal URL As String: website để load
  4. Optional ByVal IndexPage As Integer: Kết nối thứ tự website trùng nhau
  5. Optional ByRef boolWait As Boolean: Đợi chrome load xong
  6. Optional ByRef refBoolCheckUrl As Boolean: Kiểm tra website đã có chưa
  7. Optional ByVal boolStartIfExists As Boolean: Nếu có vẫn load thêm
  8. Optional ByVal boolNewTab As Boolean: Mở trong tab mới
  9. Optional ByVal lngPort As Long = 9222: Port kết nối của Chromedriver thường thì 9222, 9333, 9444, 9555, 9666, 9777, ...
  10. Optional ByVal boolApp As Boolean: Khởi động khung Chrome ở chế độ Application
  11. Optional ByVal lngVisible = vbNormalFocus: Khung hiển thị của Chrome, lặn, toàn màn hình, bình thường
  12. Optional ByVal boolMaximize As Boolean: Toàn màn hình
  13. Optional ByVal strPosition As String = "0,0": Vị trí bắt đầu của khung Chrome
  14. Optional ByVal strSize As String = "1900,1053": Độ rộng của khung chrome
  15. Optional ByVal boolGPU As Boolean = True: cho phép phần cứng GPU
  16. Optional ByVal boolClose As Boolean
  17. Optional ByVal strBrowser As String = "chrome": phân trình duyệt chrome hay các trình duyệt khác
  18. Optional ByVal strChromePath As String = Chrome_ROOT: Đường dẫn đã cài đặt chrome
  19. Optional ByVal strUserDataDir As String: Dữ liệu tạm được lưu ở đâu, mặc định là trong thư mục Temp

Hãy chạy thủ tục Chrome_SE_test để kiểm thử.

Sửa hằng Chrome_ROOT là đường dẫn Chrome được cài trên máy hiện hành.
-------------------------------------------------

JavaScript:
Option Explicit
Const Chrome_ROOT$ = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
Public oChromeDriver As Object
Private Sub Chrome_SE_test()
  Call Chrome_SE(oChromeDriver, URL:="https://www.giaiphapexcel.com/diendan/whats-new/", _
                  boolStart:=True, refBoolCheckUrl:=True, lngVisible:=1, _
                  boolMaximize:=True, strPosition:="0,0", strSize:="1800,1053")
End Sub

Function Chrome_SE( _
              Optional ByRef Driver As selenium.WebDriver, _
              Optional ByRef boolStart As Boolean, _
              Optional ByVal URL As String, _
              Optional ByVal IndexPage As Integer = 1, _
              Optional ByRef boolWait As Boolean, _
              Optional ByRef refBoolCheckUrl As Boolean, _
              Optional ByVal boolStartIfExists As Boolean, _
              Optional ByVal boolNewTab As Boolean, _
              Optional ByVal lngPort As Long = 9222, _
              Optional ByVal boolApp As Boolean, _
              Optional ByVal lngVisible = vbNormalFocus, _
              Optional ByVal boolMaximize As Boolean, _
              Optional ByVal strPosition As String = "0,0", _
              Optional ByVal strSize As String = "1900,1053", _
              Optional ByVal boolGPU As Boolean = True, _
              Optional ByVal boolClose As Boolean, _
              Optional ByVal strBrowser As String = "chrome", _
              Optional ByVal strChromePath As String = Chrome_ROOT, _
              Optional ByVal strUserDataDir As String) As Boolean

  Dim Win, Process, isBrowserOpen As Boolean, isOpen As Boolean, K%, i%
  If lngPort <= 0 Then lngPort = 9222
  If strUserDataDir = vbNullString Then
    strUserDataDir = IIf(Environ$("tmp") <> vbNullString, Environ$("tmp"), Environ$("temp")) & "\remote-profile-cr"
  End If
  GoSub CheckCR: isOpen = isBrowserOpen
  If Not isOpen Then
    If Not boolStart And Not boolStartIfExists Then GoTo Ends
    Dim CmdLn$
    CmdLn = _
      IIf(lngPort > 0, " --remote-debugging-port=" & lngPort, "") & _
      IIf(strUserDataDir <> vbNullString, " --user-data-dir=""" & strUserDataDir & """", "") & _
      " --lang=en" & _
      IIf(URL = "", "", IIf(boolApp, " --app=", " ")) & URL & _
      IIf(boolMaximize And lngVisible <> 0, " --start-maximized", "") & _
      IIf(strPosition <> vbNullString And Not boolMaximize, " --window-position=" & strPosition, "") & _
      IIf(strSize <> vbNullString And Not boolMaximize, " --window-size=" & strSize, "") & _
      IIf(boolGPU, "", " --disable-gpu")
    Shell strChromePath & "" & CmdLn, vbNormalFocus
    Do Until isBrowserOpen:
      GoSub CheckCR: For i = 1 To 1000: Next
      K = K + 1: If K > 12 Then GoTo Ends
    Loop
  End If
  If Driver Is Nothing Then
    Set Driver = New selenium.ChromeDriver
    Driver.SetCapability "debuggerAddress", "127.0.0.1:" & lngPort
    Driver.Start "chrome"
    'Driver.setImplicitWait 5000
    'Driver.setTimeout 120000
    Driver.Timeouts.PageLoad = 10000
    Driver.Timeouts.Server = 10000
    GoSub FindChrDrv
  End If
  GoSub CheckUrl
Ends:
Chrome_SE = isBrowserOpen
Set Process = Nothing: Set Win = Nothing
Exit Function
CheckUrl:
  If Not refBoolCheckUrl Then Return
  K = 0
  On Error Resume Next
  refBoolCheckUrl = False
  For Each Win In Driver.Windows
    If Err.Number <> 0 Then Return
    Win.Activate
    LCase$ (Driver.URL) Like "*" & LCase$(URL) & "*"
    If LCase$(Driver.URL) Like "*" & LCase$(URL) & "*" Then
      K = K + 1: If IndexPage = K Then refBoolCheckUrl = True: Exit For
    End If
  Next
  If Not refBoolCheckUrl Or (boolStartIfExists And refBoolCheckUrl) Then
    If boolNewTab Then
      Driver.ExecuteScript "window.open(arguments[0], '_blank');", URL
    Else
      Driver.Get URL
    End If
  End If
  On Error GoTo 0
Return
FindChrDrv:
  For Each Process In GetObject("winmgmts:\\.\root\CIMV2") _
    .execquery("SELECT * FROM Win32_Process WHERE Name = ""chromedriver.exe""", , 48)
    Set oChromeDriver = Process: Exit For
  Next
Return
CheckCR:
  For Each Process In GetObject("winmgmts:\\.\root\CIMV2") _
    .execquery("SELECT * FROM Win32_Process WHERE Name = """ & strBrowser & ".exe""", , 48)
    If LCase$(Process.commandLine) Like _
       LCase$("*" & strBrowser & "*--remote-debugging-port=" & _
        lngPort & "*--user-data-dir=*" & LCase$(strUserDataDir) & "*") Then
      isBrowserOpen = True: If boolClose Then Process.Terminate: Set Driver = Nothing: GoTo Ends
      Exit For
    End If
  Next
Return
End Function

Sub Close_SE(ByRef Driver As selenium.WebDriver)
  Dim Win
  On Error Resume Next
  For Each Win In Driver.Windows: Win.Close: Next: Driver.Quit
  Set Win = Nothing: Set Driver = Nothing
  On Error GoTo 0
End Sub
-------------------------------------------------
Các bạn có thể điều khiển Chrome dựa vào Lớp Driver hoặc JavaScript trong lệnh Execute của lớp Driver

(Còn tiếp)


Dưới đây là hình ảnh ứng dụng tôi đã viết bằng VBA để đăng nhập GiaiPhapExcel bằng Chrome các bạn có thể xem qua:

----------------------------------------------------
Viết bài GPE 2.png
-----------------------------------------------------



Viết bài GPE 1.png
 
Hôm nay tôi sẽ hướng dẫn các bạn cách điều khiển một trình duyệt hoạt động dựa vào nhân Chromium.

Cài đặt:
1. SeleniumBasic

2. Tải Chromedriver.exe sao chép vào thư mục: SeleniumBasic đã cài đặt
Thường thì đường dẫn là C:\Users\xxxxxxxxxxx\AppData\Local\SeleniumBasic

Để cập nhật Chromedriver.exe tự động có thể sử dụng Code sau:

Đặt đường dẫn Chrome trước khi cập nhật:

Thường thì C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

JavaScript:
#If VBA7 Then
     Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
  (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
  ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#Else
     Public Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
  (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, _
  ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#End If

Sub btn_UpdateChromedriver()
  Debug.Print UpdateChromedriver
End Sub
Function UpdateChromedriver(Optional ByVal chromePath As String = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe") As Boolean
  On Error Resume Next
  Dim LastedUpdate As String
  Dim FSO As Object, SEPath$
  Set FSO = VBA.CreateObject("Scripting.FileSystemObject")
  Dim XMLHTTP As Object
  Dim a, Tmp1$, Tmp$, eURL$, Temp$, Info$
  Const LATEST_RELEASE = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE"
  Const URL$ = "https://chromedriver.storage.googleapis.com/"

  Const EXE$ = "\chromedriver.exe"
  Const ZIP$ = "\chromedriver_win32.zip"
  SEPath$ = Environ$("USERPROFILE") & "\AppData\Local\SeleniumBasic"
  Temp = Environ("TEMP"): GoSub DelTemp
  If Not FSO.FileExists(chromePath) Then Exit Function
  Info = FSO.GetFileVersion(chromePath)
  eURL = "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_" & Split(Info, ".")(0)
  GoSub http
  LastedUpdate = VBA.GetSetting("Chromedriver", "Update", "Last")
  If LastedUpdate < Tmp Then
    GoSub Download
  End If
Ends: Set FSO = Nothing
Exit Function
Download:
On Error Resume Next
  eURL = URL$ & Tmp & "/chromedriver_win32.zip"
  If URLDownloadToFile(0, eURL, Temp & ZIP, 0, 0) = 0 Then
    GoSub Extract
    Call VBA.SaveSetting("Chromedriver", "Update", "Last", Tmp)
  End If
On Error GoTo 0
Return
Extract:
On Error Resume Next
With VBA.CreateObject("Shell.Application")
  .Namespace(Temp & "\").CopyHere .Namespace(Temp & ZIP).Items
End With
With FSO
  If .FileExists(Temp & EXE) Then
    If .FolderExists(SEPath) Then FSO.CopyFile Temp & EXE, SEPath & EXE, True
  End If
  UpdateChromedriver = Err.Number = 0
End With
On Error GoTo 0
GoSub DelTemp
Return

DelTemp:
On Error Resume Next
  FSO.DeleteFile Temp & ZIP
  FSO.DeleteFile Temp & EXE
On Error GoTo 0
Return
http:
Set XMLHTTP = VBA.CreateObject("MSXML2.XMLHTTP.6.0")
With XMLHTTP
  .Open "GET", eURL, False
  .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"
  .setRequestHeader "Content-type", "application/x-www-form-urlencoded"
  .Send
  Tmp = VBA.Trim(Application.Clean(.responseText))
End With
Return
End Function
-------------------------------------------------



Bước tiếp theo là Mở kết nối đến chrome:


Dưới đây là một thủ tục kiểm tra và mở kết nối và kết nối phiên cũ của Chrome
Thủ tục Chrome_SE có nhiều tham số:

  1. Optional ByRef Driver As selenium.WebDriver: Lớp đối tượng chính Webdriver để kết nối
  2. Optional ByRef boolStart As Boolean: Đối số trả ngược xem Chrome đã khởi động chưa
  3. Optional ByVal URL As String: website để load
  4. Optional ByVal IndexPage As Integer: Kết nối thứ tự website trùng nhau
  5. Optional ByRef boolWait As Boolean: Đợi chrome load xong
  6. Optional ByRef refBoolCheckUrl As Boolean: Kiểm tra website đã có chưa
  7. Optional ByVal boolStartIfExists As Boolean: Nếu có vẫn load thêm
  8. Optional ByVal boolNewTab As Boolean: Mở trong tab mới
  9. Optional ByVal lngPort As Long = 9222: Port kết nối của Chromedriver thường thì 9222, 9333, 9444, 9555, 9666, 9777, ...
  10. Optional ByVal boolApp As Boolean: Khởi động khung Chrome ở chế độ Application
  11. Optional ByVal lngVisible = vbNormalFocus: Khung hiển thị của Chrome, lặn, toàn màn hình, bình thường
  12. Optional ByVal boolMaximize As Boolean: Toàn màn hình
  13. Optional ByVal strPosition As String = "0,0": Vị trí bắt đầu của khung Chrome
  14. Optional ByVal strSize As String = "1900,1053": Độ rộng của khung chrome
  15. Optional ByVal boolGPU As Boolean = True: cho phép phần cứng GPU
  16. Optional ByVal boolClose As Boolean
  17. Optional ByVal strBrowser As String = "chrome": phân trình duyệt chrome hay các trình duyệt khác
  18. Optional ByVal strChromePath As String = Chrome_ROOT: Đường dẫn đã cài đặt chrome
  19. Optional ByVal strUserDataDir As String: Dữ liệu tạm được lưu ở đâu, mặc định là trong thư mục Temp

Hãy chạy thủ tục Chrome_SE_test để kiểm thử.

Sửa hằng Chrome_ROOT là đường dẫn Chrome được cài trên máy hiện hành.
-------------------------------------------------

JavaScript:
Option Explicit
Const Chrome_ROOT$ = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
Public oChromeDriver As Object
Private Sub Chrome_SE_test()
  Call Chrome_SE(oChromeDriver, URL:="https://www.giaiphapexcel.com/diendan/whats-new/", _
                  boolStart:=True, refBoolCheckUrl:=True, lngVisible:=1, _
                  boolMaximize:=True, strPosition:="0,0", strSize:="1800,1053")
End Sub

Function Chrome_SE( _
              Optional ByRef Driver As selenium.WebDriver, _
              Optional ByRef boolStart As Boolean, _
              Optional ByVal URL As String, _
              Optional ByVal IndexPage As Integer = 1, _
              Optional ByRef boolWait As Boolean, _
              Optional ByRef refBoolCheckUrl As Boolean, _
              Optional ByVal boolStartIfExists As Boolean, _
              Optional ByVal boolNewTab As Boolean, _
              Optional ByVal lngPort As Long = 9222, _
              Optional ByVal boolApp As Boolean, _
              Optional ByVal lngVisible = vbNormalFocus, _
              Optional ByVal boolMaximize As Boolean, _
              Optional ByVal strPosition As String = "0,0", _
              Optional ByVal strSize As String = "1900,1053", _
              Optional ByVal boolGPU As Boolean = True, _
              Optional ByVal boolClose As Boolean, _
              Optional ByVal strBrowser As String = "chrome", _
              Optional ByVal strChromePath As String = Chrome_ROOT, _
              Optional ByVal strUserDataDir As String) As Boolean

  Dim Win, Process, isBrowserOpen As Boolean, isOpen As Boolean, K%, i%
  If lngPort <= 0 Then lngPort = 9222
  If strUserDataDir = vbNullString Then
    strUserDataDir = IIf(Environ$("tmp") <> vbNullString, Environ$("tmp"), Environ$("temp")) & "\remote-profile-cr"
  End If
  GoSub CheckCR: isOpen = isBrowserOpen
  If Not isOpen Then
    If Not boolStart And Not boolStartIfExists Then GoTo Ends
    Dim CmdLn$
    CmdLn = _
      IIf(lngPort > 0, " --remote-debugging-port=" & lngPort, "") & _
      IIf(strUserDataDir <> vbNullString, " --user-data-dir=""" & strUserDataDir & """", "") & _
      " --lang=en" & _
      IIf(URL = "", "", IIf(boolApp, " --app=", " ")) & URL & _
      IIf(boolMaximize And lngVisible <> 0, " --start-maximized", "") & _
      IIf(strPosition <> vbNullString And Not boolMaximize, " --window-position=" & strPosition, "") & _
      IIf(strSize <> vbNullString And Not boolMaximize, " --window-size=" & strSize, "") & _
      IIf(boolGPU, "", " --disable-gpu")
    Shell strChromePath & "" & CmdLn, vbNormalFocus
    Do Until isBrowserOpen:
      GoSub CheckCR: For i = 1 To 1000: Next
      K = K + 1: If K > 12 Then GoTo Ends
    Loop
  End If
  If Driver Is Nothing Then
    Set Driver = New selenium.ChromeDriver
    Driver.SetCapability "debuggerAddress", "127.0.0.1:" & lngPort
    Driver.Start "chrome"
    'Driver.setImplicitWait 5000
    'Driver.setTimeout 120000
    Driver.Timeouts.PageLoad = 10000
    Driver.Timeouts.Server = 10000
    GoSub FindChrDrv
  End If
  GoSub CheckUrl
Ends:
Chrome_SE = isBrowserOpen
Set Process = Nothing: Set Win = Nothing
Exit Function
CheckUrl:
  If Not refBoolCheckUrl Then Return
  K = 0
  On Error Resume Next
  refBoolCheckUrl = False
  For Each Win In Driver.Windows
    If Err.Number <> 0 Then Return
    Win.Activate
    LCase$ (Driver.URL) Like "*" & LCase$(URL) & "*"
    If LCase$(Driver.URL) Like "*" & LCase$(URL) & "*" Then
      K = K + 1: If IndexPage = K Then refBoolCheckUrl = True: Exit For
    End If
  Next
  If Not refBoolCheckUrl Or (boolStartIfExists And refBoolCheckUrl) Then
    If boolNewTab Then
      Driver.ExecuteScript "window.open(arguments[0], '_blank');", URL
    Else
      Driver.Get URL
    End If
  End If
  On Error GoTo 0
Return
FindChrDrv:
  For Each Process In GetObject("winmgmts:\\.\root\CIMV2") _
    .execquery("SELECT * FROM Win32_Process WHERE Name = ""chromedriver.exe""", , 48)
    Set oChromeDriver = Process: Exit For
  Next
Return
CheckCR:
  For Each Process In GetObject("winmgmts:\\.\root\CIMV2") _
    .execquery("SELECT * FROM Win32_Process WHERE Name = """ & strBrowser & ".exe""", , 48)
    If LCase$(Process.commandLine) Like _
       LCase$("*" & strBrowser & "*--remote-debugging-port=" & _
        lngPort & "*--user-data-dir=*" & LCase$(strUserDataDir) & "*") Then
      isBrowserOpen = True: If boolClose Then Process.Terminate: Set Driver = Nothing: GoTo Ends
      Exit For
    End If
  Next
Return
End Function

Sub Close_SE(ByRef Driver As selenium.WebDriver)
  Dim Win
  On Error Resume Next
  For Each Win In Driver.Windows: Win.Close: Next: Driver.Quit
  Set Win = Nothing: Set Driver = Nothing
  On Error GoTo 0
End Sub
-------------------------------------------------
Các bạn có thể điều khiển Chrome dựa vào Lớp Driver hoặc JavaScript trong lệnh Execute của lớp Driver

(Còn tiếp)


Dưới đây là hình ảnh ứng dụng tôi đã viết bằng VBA để đăng nhập GiaiPhapExcel bằng Chrome các bạn có thể xem qua:

----------------------------------------------------
View attachment 244012
-----------------------------------------------------



View attachment 244013
Cho xin ứng đụng đi
 
Upvote 0
Để cập nhật Chromedriver.exe tự động có thể sử dụng Code sau:...

Cái này đúng là cái tôi đang cần đây. Cảm ơn bạn nhé.
Theo tôi đọc tài liệu thì Selenium cũng hỗ trợ MS Edge, vậy có thể thêm code để tự động kiểm tra nếu máy không cài chrome thì đổi qua khởi động Edge được chứ Hesanbi? Vì nếu phân phối ứng dụng của mình và kêu người dùng phải cài thêm Chrome thì cũng hơi phiền, chi bằng dùng trình duyệt có sẳn, chỉ bắt buộc họ phải cài Selenium là đủ rồi.
 
Upvote 0
Cái này đúng là cái tôi đang cần đây. Cảm ơn bạn nhé.
Theo tôi đọc tài liệu thì Selenium cũng hỗ trợ MS Edge, vậy có thể thêm code để tự động kiểm tra nếu máy không cài chrome thì đổi qua khởi động Edge được chứ Hesanbi? Vì nếu phân phối ứng dụng của mình và kêu người dùng phải cài thêm Chrome thì cũng hơi phiền, chi bằng dùng trình duyệt có sẳn, chỉ bắt buộc họ phải cài Selenium là đủ rồi.
Vì Microsoft sắp khai tử nó, nếu anh chọn Edge thì nên chọn Chromium Edge.
 
Upvote 0
Thớt hoàn thiện ứng dụng chưa vậy? Cho mình xin với!
 
Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom