Αυτοματοποιήστε τον Internet Explorer (IE) χρησιμοποιώντας VBA

Αυτή η σελίδα περιέχει παραδείγματα κωδικοποίησης για την αυτοματοποίηση του Internet Explorer (IE) χρησιμοποιώντας VBA.

** Ενημέρωση 6/7/2019: Επί του παρόντος, ο καλύτερος τρόπος για να επιτευχθεί αυτοματοποίηση ιστού με το VBA είναι χρησιμοποιώντας το σελήνιο. Αυτό το άρθρο ΔΕΝ καλύπτει το σελήνιο. Τα παρακάτω παραδείγματα θα λειτουργήσουν και μπορεί να είναι επαρκή για τις ανάγκες σας. Ωστόσο, εάν έχετε πιο προηγμένες ανάγκες ή θέλετε να γίνετε ειδικός στον αυτοματισμό ιστού, συνιστώ ανεπιφύλακτα να χρησιμοποιήσετε Selenium. Το μάθημα του Dan Strong για τον αυτοματισμό ιστού (η έκπτωση διατίθεται μέσω αυτού του συνδέσμου) είναι ένας φανταστικός πόρος για να μάθετε το σελήνιο:

(Λαμβάνω μια Επιτροπή Συνεργασίας από το μάθημα του Dan)

Μεταβείτε σε μια ιστοσελίδα με VBA

Το πρώτο κομμάτι κώδικα ανοίγει το IE και μεταβαίνει σε έναν ιστότοπο. Το δεύτερο κομμάτι κώδικα ανοίγει το IE, μεταβαίνει σε έναν ιστότοπο και αλληλεπιδρά με ένα πλαίσιο εισαγωγής.

12345678910111213141516171819202122232425262728293031323334353637 Sub Automate_IE_Load_Page ()"Αυτό θα φορτώσει μια ιστοσελίδα σε IEDim i As LongDim URL ως συμβολοσειράDim IE ως αντικείμενοDim objElement As ObjectDim objCollection As Object«Δημιουργία αντικειμένου InternetExplorerΟρίστε IE = CreateObject ("InternetExplorer.Application")'Ορισμός IE.Visible = True για να γίνει ορατή η IE ή Λάθος για εκτέλεση της IE στο παρασκήνιοIE.Visible = True«Ορισμός διεύθυνσης URLURL = "https://www.automateexcel.com/excel/"«Μεταβείτε στη διεύθυνση URLIE. Πλοήγηση URL'Statusbar ας ενημερώσει ο χρήστης ότι φορτώνεται ο ιστότοποςApplication.StatusBar = Το URL & "φορτώνεται. Περιμένετε …"'Περιμένετε όσο φορτώνεται το IE …' IE ReadyState = 4 σημαίνει ότι έχει φορτωθεί η ιστοσελίδα (ο πρώτος βρόχος έχει ρυθμιστεί ώστε να αποφεύγεται η ακούσια παράλειψη του δεύτερου βρόχου)Do while IE.ReadyState = 4: DoEvents: Loop 'Do whileΕκτελέστε μέχρι IE.ReadyState = 4: DoEvents: Loop 'Do Until'Φορτώθηκε η ιστοσελίδαApplication.StatusBar = URL & "Loaded"«Εκφόρτωση IEΟρίστε IE = ΤίποταSet objElement = ΤίποταΟρισμός objCollection = ΤίποταΤέλος υπο

Ένα πολύ συνηθισμένο πρόβλημα που αντιμετωπίζουν οι άνθρωποι όταν εργάζονται με IE σε VBA είναι η προσπάθεια VBA να εκτελέσει κώδικα πριν από την πλήρη φόρτωση του Internet Explorer. Χρησιμοποιώντας αυτόν τον κώδικα, λέτε στη VBA να επαναλάβει ένα βρόχο έως ότου το IE είναι έτοιμο (IE.ReadyState - 4).

1234 "Περιμένετε όσο φορτώνεται το IE …" IE ReadyState = 4 σημαίνει ότι έχει φορτωθεί η ιστοσελίδα (ο πρώτος βρόχος έχει ρυθμιστεί ώστε να αποφεύγεται η ακούσια παράλειψη του δεύτερου βρόχου)Do while IE.ReadyState = 4: DoEvents: Loop 'Do whileΕκτελέστε μέχρι IE.ReadyState = 4: DoEvents: Loop 'Do Until

Επίσης, σημειώστε αυτήν τη γραμμή κώδικα:

1 IE.Visible = TRUE

Αυτός ο κωδικός εναλλάσσει εάν το IE εκτελείται στο παρασκήνιο ή στο προσκήνιο.

Ανοίξτε τη διεύθυνση URL και εισαγάγετε δεδομένα σε φόρμα χρησιμοποιώντας το VBA

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 'Αυτό πρέπει να βρίσκεται στην κορυφή της ενότητας σας. Χρησιμοποιείται για να ορίσει το IE ως ενεργό παράθυροPublic Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) ΌσοSub Automate_IE_Enter_Data ()"Αυτό θα φορτώσει μια ιστοσελίδα σε IEDim i As LongDim URL ως συμβολοσειράDim IE ως αντικείμενοDim objElement As ObjectDim objCollection As ObjectDim HWNDSrc Όσο καιρό«Δημιουργία αντικειμένου InternetExplorerΟρίστε IE = CreateObject ("InternetExplorer.Application")'Ορισμός IE.Visible = True για να γίνει ορατή η IE ή Λάθος για εκτέλεση της IE στο παρασκήνιοIE.Visible = True«Ορισμός διεύθυνσης URLURL = "https://www.automateexcel.com/vba"«Μεταβείτε στη διεύθυνση URLIE. Πλοήγηση URL'Statusbar ας ενημερώσει ο χρήστης ότι φορτώνεται ο ιστότοποςApplication.StatusBar = Το URL & "φορτώνεται. Περιμένετε …"'Περιμένετε όσο φορτώνεται το IE …' IE ReadyState = 4 σημαίνει ότι έχει φορτωθεί η ιστοσελίδα (ο πρώτος βρόχος έχει ρυθμιστεί ώστε να αποφεύγεται η ακούσια παράλειψη του δεύτερου βρόχου)Do while IE.ReadyState = 4: DoEvents: LoopΚάντε μέχρι το IE.ReadyState = 4: DoEvents: Loop'Φορτώθηκε η ιστοσελίδαApplication.StatusBar = URL & "Loaded""Λάβετε το αναγνωριστικό παραθύρου για IE, ώστε να μπορούμε να το ορίσουμε ως παράθυρο ενεργοποίησηςHWNDSrc = IE.HWND«Ορίστε το IE ως ενεργό παράθυροSetForegroundWindow HWNDSrc«Βρείτε και συμπληρώστε το πλαίσιο εισαγωγήςn = 0Για κάθε itm Στο IE.document.allΑν itm = "[object HTMLInputElement]" Τότεn = n + 1Αν n = 3 Τότεitm.Value = "orksheet"itm.Focus 'Ενεργοποιεί το πλαίσιο εισαγωγής (κάνει την εμφάνιση του δρομέα)Application.SendKeys "{w}", True 'Προσομοιώνει ένα πάτημα πλήκτρου' W '. Ο True λέει στο VBA να περιμένει«έως ότου τελειώσει το πλήκτρο πριν προχωρήσουμε, επιτρέποντας«javascript στη σελίδα για εκτέλεση και φιλτράρισμα του πίνακαGoTo endmacroΤέλος εανΤέλος εανΕπόμενο«Εκφόρτωση IEendmacro:Ορίστε IE = ΤίποταSet objElement = ΤίποταΟρισμός objCollection = ΤίποταΤέλος υπο

GetElement σε IE χρησιμοποιώντας VBA

Η αλληλεπίδραση με αντικείμενα στον Internet Explorer μπορεί συχνά να προκαλέσει πόνο. Πρέπει να προσδιορίσετε με ποιο συγκεκριμένο αντικείμενο θα εργαστείτε. Στον παραπάνω κώδικα, αναζητούμε την 3η παρουσία του "[object HTMLInputElement]" (μια φόρμα εισαγωγής). Στη συνέχεια, εισάγουμε "orksheet" στη φόρμα εισαγωγής (itm.value = "orksheet"), μετακινούμε τον κέρσορα στη φόρμα εισόδου (itm.focus) και πληκτρολογούμε "w". Η πληκτρολόγηση "w" είναι απαραίτητη σε αυτήν την περίπτωση για να ενεργοποιήσετε το javascript που χρησιμοποιείται για το φιλτράρισμα του πίνακα.

Υπάρχουν πιο άμεσες μέθοδοι για την επιλογή αντικειμένων, ωστόσο αυτή η μέθοδος θα πρέπει να λειτουργήσει εάν όλα τα άλλα αποτύχουν.

Για να χρησιμοποιήσετε αυτές τις άλλες μεθόδους, θα θέλετε να χρησιμοποιήσετε τις ακόλουθες επιλογές:

1234 IE.document.getelementbyid ("ID"). Value = "value" 'Εύρεση με αναγνωριστικόIE.document.getelementsbytagname ("ID"). Value = "value" 'Εύρεση με ετικέταIE.document.getelementsbyclassname ("ID"). Value = "value" 'Εύρεση ανά τάξηIE.document.getelementsbyname ("ID"). Value = "value" 'Εύρεση κατά όνομα

Μπορείτε να αντιμετωπίσετε προβλήματα όταν χρησιμοποιείτε αυτές τις μεθόδους εάν υπάρχουν περισσότερα από ένα στοιχεία με το ίδιο όνομα. Χρησιμοποιώντας ένα βρόχο (όπως στο παραπάνω δείγμα κώδικα), μπορείτε να καθορίσετε ποια παρουσία του στοιχείου θα χρησιμοποιήσετε.

Αλληλεπιδράστε με IE χρησιμοποιώντας VBA

Στον παραπάνω κώδικα χρησιμοποιούμε το συμβάν: Συγκεντρώνω (itm.focus) για να ενεργοποιήσετε τον κέρσορα στη φόρμα.

Μπορείτε να βρείτε περισσότερα παραδείγματα συμβάντων, μεθόδων και ιδιοτήτων αντικειμένου/στοιχείου εδώ: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx

Δεν λειτουργούν όλα αυτά με κάθε αντικείμενο / στοιχείο και ενδέχεται να υπάρχει αρκετή δοκιμή και σφάλμα κατά την αλληλεπίδραση με αντικείμενα στο IE.

Αποστολή κλειδιών στον Internet Explorer

Χρησιμοποιήσαμε την εντολή Sendkeys στον παραπάνω κώδικα:

1 Application.SendKeys "{w}", True

Τα Sendkeys πρέπει γενικά να είναι η τελευταία λύση. Συνήθως θα πρέπει να μπορείτε να αλληλεπιδράτε με αντικείμενα απευθείας, ωστόσο μερικές φορές είναι ευκολότερο να χρησιμοποιήσετε την εντολή Sendkeys. Το Sendkeys είναι ουσιαστικά το ίδιο με το πληκτρολόγιο με το πληκτρολόγιο. Πρέπει να βεβαιωθείτε ότι επιλέγετε τα σωστά παράθυρα και αντικείμενα προτού προχωρήσετε. Τα κλειδιά αποστολής μπορούν επίσης να ενεργοποιήσουν συμβάντα που εκτελούνται με βάση την αλληλεπίδραση των χρηστών στον ιστό. Στο παραπάνω παράδειγμα, χρησιμοποιούμε Sendkeys για να ενεργοποιήσουμε το φίλτρο Javascript στον Πίνακα που χρησιμοποιούμε στην ιστοσελίδα.

Το Sendkeys έχει δύο εισόδους:
1. το κλειδί για εισαγωγή (γενικά περιβάλλεται από {}… {enter}, {q}….)
2. Περιμένετε έως ότου ολοκληρωθεί το Sendkeys προτού προχωρήσετε σε TRUE/FALSE. Γενικά θα θέλετε αυτό το σετ να είναι TRUE όταν εργάζεστε με τον Internet Explorer.

Εκτελέστε τον Internet Explorer στο παρασκήνιο

Για να εκτελέσετε τον Internet Explorer στο παρασκήνιο, πρέπει να κάνετε δύο πράγματα:

1. Καλέστε τη μακροεντολή που περιέχει τον κωδικό IE με την εφαρμογή. Εκτελέστε ώστε η μακροεντολή να εκτελείται στο παρασκήνιο καθώς συνεχίζετε να εργάζεστε:

1 Application.Run ("Automate_IE_Load_Page")

Σημείωση: Αυτός ο κώδικας ενδέχεται να διακόψει την εργασία σας ή η εργασία σας να επηρεάσει τον κώδικα. Για παράδειγμα, εάν χρησιμοποιείτε SendKeys, τα Sendkeys μπορεί να στείλουν ένα πάτημα πλήκτρου σε λάθος εφαρμογή. Να είστε πολύ προσεκτικοί με αυτό.
2. Απόκρυψη IE:

1 IE.Visible = Λάθος

Σελήνιο & VBA

Εάν βρήκατε αυτό το άρθρο χρήσιμο, ίσως θελήσετε να ελέγξετε το μάθημα του Dan Strong σχετικά με τον αυτοματισμό Ιστού. Καλύπτει πώς να χρησιμοποιήσετε το σελήνιο με VBA.

(Λαμβάνω μια Επιτροπή Συνεργασίας από το μάθημα του Dan)

Μαρτυρία από έναν από τους μαθητές του Dan

https://excelvbaisfun.com/wp-content/uploads/2019/06/dan_strong_complete_web_automation_course_review_VbFn2vwul8A_1080p.mp4

Θα βοηθήσει στην ανάπτυξη του τόπου, μοιράζονται τη σελίδα με τους φίλους σας

wave wave wave wave wave