MoneyForward Cloud Automatisiert Zeitstempel [Lassen Sie Python die Probleme machen]

Haftungsausschluss

Wir sind nicht verantwortlich für Schäden, die durch den Inhalt dieses Artikels verursacht werden. Dieser Artikel wurde als persönliches Hobby geschrieben und hat nichts mit der Firma zu tun, der ich angehöre. Darüber hinaus empfehlen wir nicht, gegen Unternehmensregeln zu verstoßen.

Nutzungsbedingungen für MoneyForward Cloud

Ich habe die Nutzungsbedingungen überprüft, konnte jedoch keine Beschreibung finden, die den automatischen Betrieb vom Computer aus verbietet. (Wenn jemand bemerkt, dass Sie übersehen, lassen Sie es mich bitte wissen. Ich werde sofort aufhören.)

(6) Handlungen, die diesen Dienst, die über diesen Dienst aufgerufenen Inhaltsseiten und die Netzwerke oder Systeme von Informationsanbietern übermäßig belasten.

(13) Handlungen, die den Betrieb dieses Dienstes durch unser Unternehmen beeinträchtigen können

Wir haben festgestellt, dass es kein Problem gibt, da der Prozess des übermäßigen Zugriffs nicht berücksichtigt wird.

(16) Andere Handlungen, die das Unternehmen für unangemessen hält

Bitte, MoneyForward, beurteilen Sie es nicht als unangemessen

Wie ich mich für die Automatisierung entschieden habe

Die Teilnahme wird jeden Morgen zur gleichen Zeit abgestempelt, und die Abreise wird zur gleichen Zeit abgestempelt. Dies ist eine völlig lange Aussage. Das machen die Leute nicht. So wird es automatisiert. (Wir warten auf die Tsukkomi, dass die Bedeutung des Stempelns nicht gut ist)

Code verwendet

Der Code ist auf Github verfügbar. Nicht der gesamte Code ist im Artikel enthalten. Wenn Sie also mehr wissen möchten, lesen Sie den Code direkt. Ich denke, es gibt einen eleganteren Weg, also zögern Sie nicht, eine Ausgabe oder PR zu werfen. Bitte. https://github.com/Haruka0522/AutoMFKintai

Gesamtzusammensetzung

Greifen Sie mit Selenium auf gestempelte Webseiten von Python aus zu ↓ Feiertags- / Wochentagsbeurteilung unter Verwendung von Datum / Uhrzeit und Feiertag ↓ Klicken Sie auf die Schaltfläche, wenn die voreingestellte Arbeits- / Urlaubszeit erreicht ist

Es ist einfach!

Brechen Sie den Anmeldebildschirm durch

Quellcode (Auszug)

id_box = self.driver.find_element_by_name("employee_session_form[office_account_name]")
id_box.send_keys(self.company_id)

mail_box = self.driver.find_element_by_name("employee_session_form[account_name_or_email]")
mail_box.send_keys(self.mail)

password_box = self.driver.find_element_by_name("employee_session_form[password]")
password_box.send_keys(self.password)

login_button = self.driver.find_element_by_name("commit")
login_button.click()

Geben Sie nach dem Zugriff auf den Anmeldebildschirm das Eingabefeld mit dem Namen des Elements an und geben Sie dort die Anmeldeinformationen ein. Der Name dieses Elements kann im Entwicklermodus ermittelt werden, indem Sie mit Chrome darauf zugreifen und die Taste F12 drücken. Es war ein Durchbruch des Anmeldebildschirms, der voraussichtlich schwierig sein würde, aber es war möglich, leicht durchzubrechen.

Hinweis

Wenn Sie das Passwort usw. im Quellcode fest codieren und es versehentlich auf Github hochladen, wird es schwierig. Nehmen Sie also eine Methode wie das Schreiben des Passworts usw. in eine Textdatei namens pass.txt und lesen Sie es. Wenn Sie pass.txt mit .gitignore aus der Git-Verwaltung entfernen, müssen Sie sich keine Sorgen über versehentliches Drücken machen.

Klicken Sie auf die Schaltfläche Stempel

Quellcode (Auszug)

actions = ActionChains(self.driver)
actions.move_by_offset(480, 250)
actions.click()
actions.perform()

Hier kämpfte ich nüchtern. Der Versuch, durch Angabe des Elements der Stempelschaltfläche zu klicken, funktionierte nicht. Da onclick () geschrieben wurde, habe ich versucht, Javascript direkt auszuführen, aber aus irgendeinem Grund hat es nicht funktioniert. Obwohl dies keine sehr gute Methode ist, habe ich die Koordinaten des Bildschirms angegeben und darauf geklickt. Da die Fenstergröße von Chrome in der Anfangseinstellung festgelegt ist, denke ich, dass es auch dann funktioniert, wenn sich die Umgebung ändert, aber ehrlich gesagt ist es nicht elegant, daher möchte ich es in Zukunft verbessern.

Beurteilung an Samstagen, Sonntagen und Feiertagen an Wochentagen

Ich möchte nicht versehentlich samstags und sonntags stampfen. In meinem Fall arbeite ich grundsätzlich an Wochentagen, daher stelle ich den Stempel nur an Wochentagen ein.

Quellcode

def is_holiday(date):
    return date.weekday() >= 5 or jpholiday.is_holiday(date)

Ich habe die datetime-Bibliothek und die jpholiday-Bibliothek verwendet, um Wochentage zu bestimmen. Ich habe datetime verwendet, um einfache Samstage und Sonntage zu beurteilen, und jppoliday, um Feiertage zu beurteilen.

Referenzartikel

https://qiita.com/hid_tanabe/items/3c5e6e85c6c65f7b38be

Hauptschleife

while True:
    dt_now = datetime.datetime.now()
    if is_holiday(datetime.date.today()):  #Wochentagsurteil
        continue
    if dt_now.hour == start_time.hour and dt_now.minute == start_time.minute:
        operator.syukkin()
    elif dt_now.hour == end_time.hour and dt_now.minute == end_time.minute:
        operator.taikin()
    else:
        time.sleep(wait_time)

Schließlich

Wenn Sie dies auf einem Computer ausführen, der 24 Stunden am Tag ausgeführt wird (Razpai sieht mit Energieeinsparung gut aus), wird es automatisch gestempelt. Ich möchte in der Lage sein, einzigartige Feiertage in Zusammenarbeit mit Google Kalender usw. zu verwalten, und ich möchte ein System haben, bei dem ein solches Skript überhaupt nicht geschrieben werden muss. Ich habe das Gefühl, dass ich von allen Seiten wütend werden könnte, aber ist es okay ...?

Recommended Posts

MoneyForward Cloud Automatisiert Zeitstempel [Lassen Sie Python die Probleme machen]
(◎◎) {Lass Python die langweiligen Dinge machen) ......... (Hey? Lass uns Python die Hausaufgaben machen} (゜) (゜)
[Version 2020] Lassen Sie Python alle Steuer- und Take-Home-Berechnungen durchführen
"Lassen Sie Python die langweiligen Dinge tun" Übung ~ Befehlszeilen-Mailer ~
Grundlegendes zur Python-Klasse Kampf (1) Verschieben wir sie vorerst
Lassen Sie uns vorerst Googles Vision API von Python berühren
Versuchen Sie vorerst, FireBase Cloud Firestore mit Python zu verwenden
Siehe Python zum ersten Mal