Διαφήμιση
Η ανίχνευση ιστού είναι εξαιρετικά χρήσιμη για την αυτοματοποίηση ορισμένων εργασιών που εκτελούνται τακτικά σε ιστότοπους. Μπορείτε να γράψετε έναν ανιχνευτή για να αλληλεπιδρά με έναν ιστότοπο όπως ακριβώς θα έκανε ένας άνθρωπος.
Σε προηγούμενο άρθρο Πώς να δημιουργήσετε ένα βασικό πρόγραμμα ανίχνευσης Ιστού για να αντλήσετε πληροφορίες από έναν ιστότοποΘέλατε ποτέ να συλλάβετε πληροφορίες από έναν ιστότοπο; Δείτε πώς μπορείτε να γράψετε έναν ανιχνευτή για να περιηγηθείτε σε έναν ιστότοπο και να εξαγάγετε ό, τι χρειάζεστε. Διαβάστε περισσότερα , καλύψαμε τα βασικά της γραφής α webcrawler Τι είναι το Web Scraping; Πώς να συλλέξετε δεδομένα από ιστότοπουςΒρεθήκατε ποτέ να χάνετε πολύτιμο χρόνο διαβάζοντας δεδομένα σε ιστοσελίδες; Δείτε πώς μπορείτε να βρείτε τα δεδομένα που θέλετε με την απόξεση ιστού. Διαβάστε περισσότερα χρησιμοποιώντας τη μονάδα python, scrapy. Ο περιορισμός αυτής της προσέγγισης είναι ότι ο ανιχνευτής δεν υποστηρίζει javascript. Δεν θα λειτουργήσει σωστά με αυτούς τους ιστότοπους που κάνουν μεγάλη χρήση της javascript για τη διαχείριση της διεπαφής χρήστη. Για τέτοιες περιπτώσεις, μπορείτε να γράψετε ένα πρόγραμμα ανίχνευσης που χρησιμοποιεί το Google Chrome και ως εκ τούτου μπορεί να χειριστεί το javascript ακριβώς όπως ένα κανονικό πρόγραμμα περιήγησης Chrome που βασίζεται στο χρήστη.
Η αυτοματοποίηση του Google Chrome περιλαμβάνει τη χρήση ενός εργαλείου που ονομάζεται Σελήνιο. Είναι ένα στοιχείο λογισμικού που βρίσκεται μεταξύ του προγράμματός σας και του προγράμματος περιήγησης και σας βοηθά να οδηγείτε το πρόγραμμα περιήγησης μέσω του προγράμματός σας. Σε αυτό το άρθρο, σας καθοδηγούμε στην πλήρη διαδικασία αυτοματοποίησης του Google Chrome. Τα βήματα γενικά περιλαμβάνουν:
- Ρύθμιση σεληνίου
- Χρήση του Google Chrome Inspector για την αναγνώριση ενοτήτων της ιστοσελίδας
- Σύνταξη προγράμματος java για την αυτοματοποίηση του Google Chrome
Για τους σκοπούς του άρθρου, ας διερευνήσουμε πώς να διαβάζουμε το Google Mail από τη Java. Ενώ η Google παρέχει ένα API (Application Programming Interface) για την ανάγνωση αλληλογραφίας, σε αυτό το άρθρο χρησιμοποιούμε το Selenium για να αλληλεπιδράσουμε με το Google Mail για να επιδείξουμε τη διαδικασία. Το Google Mail κάνει μεγάλη χρήση της javascript και είναι επομένως καλός υποψήφιος για την εκμάθηση του Selenium.
Ρύθμιση σεληνίου
Πρόγραμμα οδήγησης Ιστού
Όπως εξηγήθηκε παραπάνω, Σελήνιο αποτελείται από ένα στοιχείο λογισμικού που εκτελείται ως ξεχωριστή διαδικασία και εκτελεί ενέργειες για λογαριασμό του προγράμματος java. Αυτό το συστατικό ονομάζεται Πρόγραμμα οδήγησης Ιστού και πρέπει να γίνει λήψη στον υπολογιστή σας.
Κάντε κλικ ΕΔΩ για να μεταβείτε στον ιστότοπο λήψης του Selenium, κάντε κλικ στην πιο πρόσφατη έκδοση και πραγματοποιήστε λήψη του κατάλληλου αρχείου για το λειτουργικό σύστημα του υπολογιστή σας (Windows, Linux ή MacOS). Είναι ένα αρχείο ZIP που περιέχει chromedriver.exe. Εξάγετε το σε μια κατάλληλη θέση όπως π.χ C:\WebDrivers\chromedriver.exe. Θα χρησιμοποιήσουμε αυτήν τη θέση αργότερα στο πρόγραμμα java.
Ενότητες Java
Το επόμενο βήμα είναι να ρυθμίσετε τις μονάδες java που απαιτούνται για τη χρήση του Selenium. Υποθέτοντας ότι χρησιμοποιείτε το Maven για τη δημιουργία του προγράμματος java, προσθέστε την ακόλουθη εξάρτηση στο δικό σας πρόγραμμα POM.xml.
org.seleniumhq.selenium σελήνιο-java 3.8.1
Όταν εκτελείτε τη διαδικασία δημιουργίας, όλες οι απαιτούμενες ενότητες θα πρέπει να ληφθούν και να ρυθμιστούν στον υπολογιστή σας.
Σελήνιο πρώτα βήματα
Ας ξεκινήσουμε με το σελήνιο. Το πρώτο βήμα είναι να δημιουργήσετε ένα ChromeDriver παράδειγμα:
Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver();
Αυτό θα πρέπει να ανοίξει ένα παράθυρο του Google Chrome. Ας πλοηγηθούμε στη σελίδα αναζήτησης Google.
driver.get(" http://www.google.com");
Λάβετε μια αναφορά στο στοιχείο εισαγωγής κειμένου για να μπορέσουμε να πραγματοποιήσουμε αναζήτηση. Το στοιχείο εισαγωγής κειμένου έχει το όνομα q. Εντοπίζουμε στοιχεία HTML στη σελίδα χρησιμοποιώντας τη μέθοδο WebDriver.findElement().
Στοιχείο WebElement = driver.findElement (By.name("q"));
Μπορείτε να στείλετε κείμενο σε οποιοδήποτε στοιχείο χρησιμοποιώντας τη μέθοδο sendKeys(). Ας στείλουμε έναν όρο αναζήτησης και ας τον τερματίσουμε με μια νέα γραμμή, ώστε η αναζήτηση να ξεκινήσει αμέσως.
element.sendKeys("terminator\n");
Τώρα που η αναζήτηση βρίσκεται σε εξέλιξη, πρέπει να περιμένουμε τη σελίδα αποτελεσμάτων. Μπορούμε να το κάνουμε ως εξής:
new WebDriverWait (πρόγραμμα οδήγησης, 10) .tuntil (d -> d.getTitle().toLowerCase().startsWith("terminator"));
Αυτός ο κωδικός λέει βασικά στο Selenium να περιμένει για 10 δευτερόλεπτα και να επιστρέψει όταν ξεκινά ο τίτλος της σελίδας τελειωτής. Χρησιμοποιούμε μια συνάρτηση λάμδα για να καθορίσουμε τη συνθήκη που θα περιμένουμε.
Τώρα μπορούμε να πάρουμε τον τίτλο της σελίδας.
System.out.println("Τίτλος: " + driver.getTitle());
Μόλις ολοκληρώσετε τη συνεδρία, το παράθυρο του προγράμματος περιήγησης μπορεί να κλείσει με:
driver.quit();
Και αυτό, παιδιά, είναι μια απλή συνεδρία προγράμματος περιήγησης που ελέγχεται χρησιμοποιώντας java μέσω σεληνίου. Φαίνεται αρκετά απλό, αλλά σας δίνει τη δυνατότητα να προγραμματίσετε πολλά πράγματα που κανονικά θα έπρεπε να κάνετε με το χέρι.
Χρήση του Google Chrome Inspector
Επιθεωρητής Google Chrome Ανακαλύψτε προβλήματα ιστότοπου με τα Εργαλεία προγραμματιστών του Chrome ή το FirebugΕάν παρακολουθείτε τα σεμινάρια μου στο jQuery μέχρι στιγμής, μπορεί να έχετε ήδη αντιμετωπίσει ορισμένα προβλήματα κώδικα και να μην γνωρίζετε πώς να τα διορθώσετε. Όταν αντιμετωπίζετε ένα μη λειτουργικό κομμάτι κώδικα, είναι πολύ... Διαβάστε περισσότερα είναι ένα ανεκτίμητο εργαλείο για την αναγνώριση στοιχείων που θα χρησιμοποιηθούν με το σελήνιο. Μας επιτρέπει να στοχεύσουμε το ακριβές στοιχείο από τη Java για την εξαγωγή πληροφοριών καθώς και μια διαδραστική ενέργεια, όπως το κλικ σε ένα κουμπί. Εδώ είναι ένα primer για τον τρόπο χρήσης του Inspector.
Ανοίξτε το Google Chrome και μεταβείτε σε μια σελίδα, πείτε τη σελίδα IMDb για Justice League (2017).
Ας βρούμε το στοιχείο που θέλει να στοχεύσει, ας πούμε η περίληψη της ταινίας. Κάντε δεξί κλικ στη σύνοψη και επιλέξτε «Επιθεώρηση» από το αναδυόμενο μενού.
Από την καρτέλα "Στοιχεία", μπορούμε να δούμε ότι το συνοπτικό κείμενο είναι α div με μια τάξη των σύνοψη_κείμενο.
Χρήση CSS ή XPath για επιλογή
Το Selenium υποστηρίζει την επιλογή στοιχείων από τη σελίδα χρησιμοποιώντας CSS. (Η διάλεκτος CSS υποστηρίζεται CSS2). Για παράδειγμα, για να επιλέξετε το κείμενο περίληψης από την παραπάνω σελίδα του IMDb, θα γράφαμε:
WebElement summaryEl = driver.findElement (By.cssSelector("div.summary_text"));
Μπορείτε επίσης να χρησιμοποιήσετε το XPath για να επιλέξετε στοιχεία με παρόμοιο τρόπο (Go εδώ για τις προδιαγραφές). Και πάλι, για να επιλέξουμε το συνοπτικό κείμενο, θα κάνουμε:
WebElement summaryEl = driver.findElement (By.xpath("//div[@class='summary_text']"));
Το XPath και το CSS έχουν παρόμοιες δυνατότητες, ώστε να μπορείτε να χρησιμοποιήσετε ό, τι αισθάνεστε άνετα.
Διαβάζοντας το Google Mail από Java
Ας δούμε τώρα ένα πιο περίπλοκο παράδειγμα: λήψη Google Mail.
Εκκινήστε το πρόγραμμα οδήγησης Chrome, μεταβείτε στο gmail.com και περιμένετε μέχρι να φορτωθεί η σελίδα.
Πρόγραμμα οδήγησης WebDriver = νέο ChromeDriver(); driver.get(" https://gmail.com"); νέο WebDriverWait (πρόγραμμα οδήγησης, 10) .tuntil (d -> d.getTitle().toLowerCase().startsWith("gmail"));
Στη συνέχεια, αναζητήστε το πεδίο email (ονομάζεται με το αναγνωριστικό identifierId) και εισάγετε τη διεύθυνση email. Κάντε κλικ στο Επόμενο και περιμένετε να φορτώσει η σελίδα κωδικού πρόσβασης.
/* Πληκτρολογήστε όνομα χρήστη/email */ { driver.findElement (By.cssSelector("#identifierId")).sendKeys (email); driver.findElement (By.cssSelector(".RveJvd")).click(); } new WebDriverWait (πρόγραμμα οδήγησης, 10) .μέχρι (d ->! d.findElements (By.xpath("//div[@id='password']")).isEmpty() );
Τώρα, εισάγουμε τον κωδικό πρόσβασης, κάνουμε κλικ στο Επόμενο πατήστε ξανά και περιμένετε να φορτώσει η σελίδα του Gmail.
/* Πληκτρολογήστε τον κωδικό πρόσβασης */ { driver .findElement (By.xpath("//div[@id='password']//input[@type='password']")) .sendKeys (password); driver.findElement (By.cssSelector(".RveJvd")).click(); } new WebDriverWait (πρόγραμμα οδήγησης, 10) .μέχρι (d ->! d.findElements (By.xpath("//div[@class='Cp']")).isEmpty() );
Λάβετε τη λίστα με τις σειρές email και κάντε βρόχο πάνω από κάθε καταχώρηση.
Λίσταrows = driver .findElements (By.xpath("//div[@class='Cp']//table/tbody/tr")); για (WebElement tr: σειρές) { }
Για κάθε καταχώρηση, φέρτε το Από πεδίο. Σημειώστε ότι ορισμένες καταχωρίσεις Από θα μπορούσαν να έχουν πολλά στοιχεία ανάλογα με τον αριθμό των ατόμων στη συνομιλία.
{ /* From Element */ System.out.println("From: "); for (WebElement e: tr .findElements (By.xpath(".//div[@class='yW']/*")) { System.out.println(" " + e.getAttribute("email") + ", " + e.getAttribute("όνομα") + ", " + e.getText()); } }
Τώρα, φέρτε το θέμα.
{ /* Θέμα */ System.out.println("Sub: " + tr.findElement (By.xpath(".//div[@class='yNN']")).getText()); }
Και την ημερομηνία και την ώρα του μηνύματος.
{ /* Ημερομηνία/Ώρα */ WebElement dt = tr.findElement (By.xpath("./td[8]/*")); System.out.println("Ημερομηνία: " + dt.getAttribute("τίτλος") + ", " + dt.getText()); }
Εδώ είναι ο συνολικός αριθμός των σειρών email στη σελίδα.
System.out.println (rows.size() + " mails.");
Και τελικά, τελειώσαμε, οπότε εγκαταλείψαμε το πρόγραμμα περιήγησης.
driver.quit();
Ανακεφαλαιώνοντας, μπορείτε να χρησιμοποιήσετε το Selenium με το Google Chrome για την ανίχνευση αυτών των ιστότοπων που χρησιμοποιούν σε μεγάλο βαθμό javascript. Και με το Google Chrome Inspector, είναι πολύ εύκολο να επεξεργαστείτε το απαιτούμενο CSS ή XPath για εξαγωγή ή αλληλεπίδραση με ένα στοιχείο.
Έχετε κάποια έργα που ωφελούνται από τη χρήση του σεληνίου; Και τι προβλήματα αντιμετωπίζετε με αυτό; Περιγράψτε στα παρακάτω σχόλια.