[PYTHON] Da ich frei bin, mache ich "RPA Tool" # 4 Selenium Edition Texterfassung

Einführung

Jeder, ich glaube ich konnte diesmal früh posten. Das ist enp. Ich möchte eine Romanze haben. Dieser Artikel ist ein Fortschrittsbericht für alle, die versuchen, ein "RPA-Tool" zu erstellen. Bitte beachten Sie, dass darin nicht beschrieben wird, wie RPA- oder RPA-Tools erstellt werden. (Vielleicht lege ich ein wenig Sauce drauf. Das hängt von meiner Stimmung ab.) Diesmal ist Teil 2, um mit Selen auszukommen. Was ich getan habe war "Adresse in Postleitzahl umwandeln" und "Postleitzahl in Adresse umwandeln". Es wird wieder ein langer Artikel sein, aber ich würde es begrüßen, wenn Sie mit mir auskommen könnten.

Ich möchte nur den Text bekommen! !!

Ja. Der Titel ist genau das. Ich möchte, dass die Zeichen auf dem Blog und die Zeichen auf Wikipedia geschrieben werden. Das war's für diesen Artikel. __ Warum versuchen Sie dann, eine Postleitzahl von Ihrer Adresse zu erhalten? __ Es wird sein. Es ist __, weil es aufgrund meiner Vorurteile und willkürlichen Berücksichtigung der für die Arbeit erforderlichen Informationen im Internet eine Postleitzahl war. Ich denke, es gibt andere Informationen, die Sie im Internet benötigen, abhängig von Ihrer Arbeit. Ich dachte jedoch, dass ich den Postcode unabhängig vom Auftragsinhalt nachschlagen würde. __ Es ist nur mein Vorurteil. __ __ Es enthält auch den einfachen Grund, dass __ viel Text zu verarbeiten hat. __ Warum versuchen Sie dann, eine Adresse aus einer Postleitzahl zu erhalten? __ Sie müssen nur die Postleitzahl von der Adresse kennen. Korrekt. Ohne die entgegengesetzte Funktion kann dies jedoch unpraktisch sein. __ Außerdem __ konnte ich mich ohne die entgegengesetzte Funktion nicht niederlassen. __ __ Diesmal haben wir also zwei Funktionen implementiert: __ "Konvertierung von Adresse in Postleitzahl" __ und __ "Konvertierung von Postleitzahl in Adresse" __.

(Um klar zu sein, wenn Sie danach suchen, denke ich, dass es eine Bibliothek gibt, die Adressen und Postleitzahlen verarbeitet. Dieses Mal werden wir sie jedoch für das Selenlernen implementieren, sodass wir nicht nach Adressen in der Bibliothek suchen. Implementieren Sie sie mit Selen Gehen)

Lassen Sie uns zunächst die Spezifikationen der Website kennen

Wenn Sie die Site-Spezifikationen nicht kennen, gibt es keine Implementierungsspezifikationen. Lernen wir also etwas über die Suche nach Postleitzahlen usw. Zunächst geht es darum, eine Adresse aus einer Postleitzahl zu suchen. 郵便番号検索.png Das Obige ist die Suchleiste für die Postleitzahlensuche. Wenn Sie die Postleitzahl in das Textfeld eingeben und die Taste drücken, sind Sie fertig. Einfach zu verstehen. Was ist also nach der Suche? 郵便番号検索後.png Es wird so angezeigt. Es scheint, dass Sie es erhalten können, indem Sie die Adresse aus der Tabelle extrahieren.

Als nächstes wird nach der Postleitzahl aus der Adresse gesucht. 住所検索.png Was hier übrigens besorgniserregend ist, ist die Präfekturauswahl. Die Umsetzung der Selektion mit Selen erscheint etwas entmutigend. Das japanische Postamt ist jedoch sehr nett. Sie können auch suchen, indem Sie alle erforderlichen Adressen in die Felder für die Eingabe von Städten, Gemeinden, Städten und Dörfern eingeben. __ __ Vielen Dank. Lassen Sie uns überlegen, ob wir dieses Jahr eine Neujahrskarte ausstellen sollen. Niemand sendet es. Nach der Suche wird es wie folgt sein. 住所検索後.png Die Postleitzahl ist nicht aufgeführt. Was ist, wenn ich auf eine Adresse im Stadtgebiet klicke? ボタンを押した後.png Es sieht aus wie oben. Die Postleitzahl kommt endlich hier raus. Das Konvertieren einer Adresse in eine Postleitzahl dauert länger.

Das Obige sind die Spezifikationen der Website.

(Wir werden es unter der Annahme implementieren, dass es nach der Suche keine anderen Kandidaten gibt. Wenn Sie nach Postleitzahl suchen, sollte die Adresse, der die Postleitzahl entspricht, auf eins festgelegt werden. Mit Ausnahme einiger Selbst bei der Adressensuche sollte eine mehrdeutige Suche als eine entschieden werden. Wenn Sie eine mehrdeutige Suche durchführen, ist sie meiner Meinung nach nicht "automatisiert", da die Suche unter der "vom Benutzer ausgewählten Prämisse" erfolgt. Beschlossen, nicht zu unterstützen)

Grenzen der Elementakquisition

Dann lassen Sie es uns sofort implementieren! Ich möchte sagen, dass hier ein Problem aufgetreten ist. Bisher haben Sie den Attributnamen des __-Elements verwendet, um Zeichen in das Textfeld einzugeben oder auf eine Schaltfläche zu klicken. __ __ (Elemente sind Divs und Eingaben, und Attribute sind Klassen und IDs.) Was aber, wenn der Name __attribute in mehreren Elementen verwendet wird? __ __ Zum Beispiel, wenn das Namensbeispiel für verschiedene Divs in der Klasse verwendet wird. In diesem Fall können Sie nicht genau bestimmen, wo Sie eingeben oder klicken möchten. __ __ Wenn Sie ein Element anhand des Attributnamens angeben möchten, verwenden Sie den ID-Namen oder den Namen. Es gibt jedoch keine Garantie dafür, dass die ID oder der Name verwendet wird. Möglicherweise verwenden Sie den Attributnamen auch nicht. Sie können es mithilfe des Elementnamens angeben. Auf Webseiten wird jedoch häufig ein Element namens div verwendet, das nicht zur Identifizierung eines Elements geeignet ist. __ Was soll ich dann tun? !! __ </ font> __ Verwenden Sie in diesem Fall XPath. __ __ __XPath? was ist das? Band? __ Das könnte man denken. Diese Person könnte sich X JAPAN vorstellen. Im nächsten Abschnitt werde ich kurz auf XPath eingehen.

Was ist XPath?

XPath ist einfach die Adresse des __ Elements __. Lassen Sie uns mit einem kleinen Beispiel erklären.

<html>
  <head>
    <title>Sample HTML</title>
  </head>
  <body>
    <h1>HTML-Beispiel</h1>
    <p>This is HTML Sample.</p>
    <p>This is HTML Sample.</p>
  </body>
</html>

Das obige ist ein HTML-Beispielprogramm. Es wird überbewertet, dass es sich um eine Stichprobe handelt. Ich erkläre kein HTML, daher werde ich weglassen, um welche Art von HTML es sich handelt. __ Wichtig ist, dass einige Attribute nicht verwendet werden und einige Elemente verwendet werden. __ __ Jetzt habe ich eine Frage an Sie. Sieht es nicht aus wie ein einzelner Block mit __ <○○> </ ○○>? __ __ __ Aus der Perspektive fühlt es sich an, als ob sich ein Körper im HTML befindet. Dieses Gefühl ist XPath. __ __ Wenn Sie das zweite p im Körper im HTML hören, ist es die 8. Zeile im Beispielprogramm? Du solltest es irgendwie verstehen. Das gleiche kann mit Selen gemacht werden. __ Wie schreibst du es dann? __ </ font> Wenn Sie nicht in Zeichen schreiben können, können Sie nicht in das Programm schreiben. Die Art und Weise, es zu schreiben, ist wie folgt.

/html/body/p[2]

Was ich sage, ist das gleiche wie zuvor. Es zeigt auf "das zweite p im Körper in HTML". Es ist jedoch schwierig, einzeln aus HTML zu schreiben. Es ist möglich, dass der gesamte HTML-Code so kurz wie das Beispiel ist, aber wenn er lang ist, ist er verwirrend. Daher können Sie den XPath bis zum gewünschten Teil mit "//" weglassen. __ __ Dies ist die Erklärung von XPath. Wenn Sie weitere Details erfahren möchten, überprüfen Sie diese bitte selbst.

Implementierung!

Jetzt implementieren wir es. Das Programm ist wie folgt.

#Bibliotheksimport
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import psutil
import re

#Geben Sie die Postleitzahl oder Adresse ein
postHint = input("Postleitzahl oder Adresse:")

#Treiberimport
chrome = webdriver.Chrome(r".\driver\chromedriver.exe")

#Gehen Sie zur JP-Postleitzahlensuchseite
chrome.get("https://www.post.japanpost.jp/zipcode/")

#Bedingter Zweig von "Postleitzahl an Adresse" oder "Adresse an Postleitzahl"
while True :
    if re.fullmatch("((\d{3})-(\d{4}))|(\d+)", postHint) : #Bei der Suche nach einer Adresse per Postleitzahl
        if re.fullmatch("(\d{3})-(\d{4})", postHint) : # -Wenn ja-Löschen
            postNumber = postHint.replace("-", "")
        else :
            postNumber = postHint

        #Suchen Sie nach einer Adresse nach Postleitzahl
        textarea = chrome.find_element_by_name("zip") #Textfeld zur Eingabe der Postleitzahl
        textarea.send_keys(postNumber) #Geben Sie die Postleitzahl ein
        textarea.send_keys(Keys.ENTER) #Bestimmt durch Eingabe

        #Holen Sie sich eine Adresse
        ken = chrome.find_element_by_xpath("//table[@class='prefList sp-b10']/tbody/tr[2]/td[2]/small").get_attribute("textContent")
        si = chrome.find_element_by_xpath("//table[@class='prefList sp-b10']/tbody/tr[2]/td[3]/small").get_attribute("textContent")
        machi = chrome.find_element_by_xpath("//table[@class='prefList sp-b10']/tbody/tr[2]/td[4]/div/p/small/a").get_attribute("textContent")

        #Adressen kombinieren
        address = ken + si + machi
        
        #Ergebnis
        print("Suchergebnisse:" + address)

        #Brechen Sie aus der Schleife aus
        break

    elif re.fullmatch(".+?Präfektur.+?\d*?-?\d*?-?\d*?-?\d*?-?\d*?", postHint) : #Von der Adresse zur Postleitzahl
        #Löschen Sie den Nummernteil der Adresse
        if re.search("\d", postHint) :
            postAddress = re.sub("\d+?-?\d*?-?\d*?-?\d*?-?\d*?", "", postHint)
        else :
            postAddress = postHint

        #Suche nach Postleitzahl von Adresse
        textarea = chrome.find_element_by_name("addr") #Textfeld zur Eingabe einer Adresse
        textarea.send_keys(postAddress)
        textarea.send_keys(Keys.ENTER)

        #Warten Sie 1 Sekunde (da die Verarbeitung des Browsers nicht aufholen kann)
        time.sleep(1)

        #Postleitzahl abrufen
        button = chrome.find_element_by_xpath("//table[@class='prefList sp-b10']/tbody/tr[2]/td[2]/div/p/a") #Holen Sie sich den Link
        button.click()
        addressNumber = chrome.find_element_by_xpath("//table[@class='zip-detail']/tbody/tr[2]/td[1]/span").get_attribute("textContent")

        #Ergebnisausgabe
        print("Suchergebnisse:" + re.sub("\s*?", "", addressNumber))

        #Brechen Sie aus der Schleife aus
        break

    else :
        postHint = repr(input("Postleitzahl oder Adresse:"))

p = psutil.Process(chrome.service.process.pid)
p.terminate()

Es ist möglicherweise etwas schwer zu erkennen, da ich die Syntaxhervorhebung deaktiviert habe. Als ich jedoch die Syntax-Highlights aktivierte, war es schwieriger zu sehen, daher habe ich sie deaktiviert. Es gibt etwas Besseres als Schlaf für die Standby-Verarbeitung, aber diesmal habe ich es zum Schlafen gebracht. Es gibt keinen besonderen Grund. Weil es nicht das Hauptthema ist. Das Programm ist einfach zu machen. Suchen und Informationen erhalten. das ist alles! einfach! Dieses Programm hat jedoch zwei schwerwiegende Nachteile. __ __ Ich habe den Fehler überhaupt nicht behandelt. Genau genommen gibt es keine zwei.

Übrigens __ fataler Nachteil Der erste ist ein Fehler bei der Suche nach Adresse, wenn es einige Kandidaten __ gibt. Kandidaten können auch dann erscheinen, wenn alle Adressen korrekt eingegeben wurden. In diesem Fall wird möglicherweise nicht die richtige Postleitzahl ausgegeben. __ Die Ursache ist, dass XPath die erste Wahl auswählt. __ __ Es kann gesagt werden, dass es ein Fehler ist, weil es eine Situation sein sollte, in der es keinen anderen als den ersten Kandidaten gibt. Eine Lösung besteht darin, die Adresse jedes Kandidaten mit der vom Benutzer eingegebenen Adresse zu vergleichen.

__ Der zweite schwerwiegende Nachteil sind die kanonischen Ausdrücke für die Suche nach losen Adressen. __ __ __ Der fragliche reguläre Ausdruck lautet ". +? Präfektur. +? \ D *? -? \ D *? -? \ D *? -? \ D *? -? \ D *?". __ __ __ Verstümmelte Charaktere? Es sind die Charaktere, an die Sie vielleicht einen Moment denken. Ich werde den regulären Ausdruck nicht erklären, aber __ bedeutet "OK, wenn es nach der Präfektur XX ein Zeichen gibt" __. __ Mit anderen Worten, ich erkenne, dass es richtig ist, "Sakura in der Präfektur Kumamoto" zu schreiben. Das ultimative "Marukenka" ist in Ordnung. __ __ __ Es wird jedoch nicht nach Elementen gesucht, die nicht "○○ Präfektur" sind, wie "Tokio" und "Präfektur Kyoto". __ __ Es ist zu schlampig, um darüber zu reden. Wenn Sie suchen und nichts getroffen wird, wird natürlich ein Fehler ausgegeben und das Programm wird beendet. __ Der Grund, warum reguläre Ausdrücke schlampig sind, liegt darin, dass die Art und Weise, eine Adresse zu schreiben, je nach Präfektur unterschiedlich ist. Wenn es ○○ Präfektur ○○ Stadt ○○, ○○ Präfektur ○○ Stadt ○○ Gemeinde ○○, ○○ Präfektur ○○ Gruppe ○○ usw. gibt. Es ist unmöglich, alle zu untersuchen und darauf zu reagieren. Möglicherweise können Sie dies tun, wenn Sie eine Liste haben. Im Moment gibt es jedoch keine andere Möglichkeit, als es einzeln nachzuschlagen, so dass es zu einem schlampigen regulären Ausdruck geworden ist. __ Außerdem habe ich einfach das Problem vergessen, nicht nach Tokio zu suchen. __Es tut mir Leid.

Was Sie tun müssen, um das RPA-Tool zu implementieren

Übrigens möchte ich die Inhalte im Zusammenhang mit der Implementierung auf der Grundlage der bisherigen Erfahrungen aufzählen. Unten sind die Bulletins.

--_ Es gibt ein Limit, wenn Sie XPath nicht zum Abrufen von Elementen verwenden können __ --_ Ich muss erklären, was XPath für diejenigen ist, die nicht programmieren können __ --_ Für diejenigen, die nicht programmieren können, ist es notwendig, sich das Schreiben von XPath __ auszudenken --__ Ohne Standby-Verarbeitung funktioniert es möglicherweise nicht gut __ --_ Ich hatte das Gefühl, dass der Bereich von RPA größer wäre, wenn bedingte Verzweigung und Wiederholung möglich wären __ --_ Über Wiederholungen Es ist praktisch, wenn Sie Pause usw. verwenden können. __ --_ Sie sollten reguläre Ausdrücke verwenden können __ --_ Ich muss erklären, was ein regulärer Ausdruck für diejenigen ist, die __ nicht programmieren können --_ Für diejenigen, die nicht programmieren können, ist es notwendig zu entwickeln, wie reguläre Ausdrücke geschrieben werden __ --_ Es ist besser, get_attribute ("textContent") zu verwenden, um den Text __ zu erhalten --_ Ich möchte auch eine Funktion zum Kombinieren von Zeichenketten __ --__ Wenn Sie den Fehler nicht gut behandeln, wird er bald brechen __

Das ist alles, woran ich jetzt denken kann. Weil get_attribute ("textContent") auch Zeichen abrufen kann, die nicht im Browser angezeigt werden Ich denke, es wird schwieriger sein, Fehler zu werfen.

Schließlich

Vielen Dank, dass Sie bis zum Ende bei uns bleiben. Ich denke, ich kann diesmal gut mit Selen auskommen. Am Ende möchte ich jedoch etwas mit Selen tun, sodass die Selen-Edition noch eine Weile fortgesetzt wird. Ich denke, der nächste Artikel wird "Lass uns mit Selen Teil 3 auskommen" sein, also danke. Das ist alles für enp.

Recommended Posts