"Lassen Sie Python die langweiligen Dinge tun" Übung ~ Befehlszeilen-Mailer ~

Ich lerne Python, um das System zu automatisieren, weil ich keine freie Stelle finden kann, wenn ich nicht 24 Stunden am Tag die Reservierungen für das Skilltraining in der Trainingsschule im Auge habe.

Ich habe den in Übung 11.10.1 des Titelbuchs veröffentlichten Befehlszeilen-E-Mail-Versender erstellt und versucht, ihn zu organisieren.

Diesmal habe ich Excite Mail verwendet, aber der Grund dafür ist, dass Google Mail und Yahoo eine Art mehrstufige Authentifizierung hatten. Es war also Excite Mail, bei der ich mich einfach mit meiner ID und meinem Passwort anmelden konnte.

Umgebung

Politik

--Erhalten Sie E-Mail-Adresse und Text von der Befehlszeile

Programmpolitik

--Verwenden Sie das sys-Modul, um Text an die E-Mail-Adresse sys.argv [2] unter sys.argv [1] zu erhalten. --Öffnen Sie die Anmeldeseite von Excite Mail mit dem Web-Treiber des Selenium-Moduls, senden Sie den Benutzernamen und das Passwort mit sendKeys und melden Sie sich mit submit () an. --Öffnen Sie den Mail-Sendebildschirm über den neu erstellten Link, geben Sie die als Argumente empfangene Mail-Adresse und den empfangenen Text ein und senden Sie ()

Implementierung

CommandlineMailer.py


#! python 3.6.0
# commnadlineMailer.py -Senden Sie Text an die E-Mail-Adresse, die Sie in der Befehlszeile erhalten haben
# Usage:
# commnadlinMailder.py <[email protected]> <sometext> -E-Mail-Adresse als erstes Argument,Erhalten Sie Text mit dem zweiten Argument

import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

if len(sys.argv) > 2:
    email_adress = str(sys.argv[1])
    main_text = str(sys.argv[2])

    #Öffnen Sie Excite Mail und melden Sie sich an
    browser = webdriver.Safari()
    browser.get('https://ssl2.excite.co.jp/idc/login/?si=mail&ru=http%3A%2F%2Femail.excite.co.jp')
    #Ich habe das Namensschild verwendet, weil es kein ID-Tag gab
    email_elem = browser.find_element_by_name('loginid') 
    email_elem.send_keys('[email protected]')

    password_elem = browser.find_element_by_id('id-password')
    password_elem.send_keys('yourPassword')
    password_elem.submit()

    #Öffnen Sie den neuen Erstellungsbildschirm, nachdem Sie auf die Anzeige der Seite gewartet haben
    link_elem = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.LINK_TEXT, 'Erstelle neu'))
    )
    link_elem.click()

    #Nachdem Sie auf die Anzeige der Seite gewartet haben, geben Sie die Mail und den Text ein und senden Sie sie
    to_elem = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, 'to'))
    )
    to_elem.send_keys(email_adress)

    main_text_elem = browser.find_element_by_id('body')
    main_text_elem.send_keys(main_text)

    send_elem = browser.find_element_by_id('_sendmail')
    send_elem.submit()
else:
    print('Es gibt nur wenige Argumente')

Der Punkt, der erwischt wurde

Zuerst habe ich es implementiert, ohne auf die Anzeige zu warten, und der Fehler kam heraus und ich fühlte mich wie "?". Aber ich bemerkte, dass ein Fehler auftrat, als ich darauf zugegriffen habe, als es nicht angezeigt wurde.

Der Punkt war, WebDriverWait zu verwenden, um die Verarbeitung zu stoppen, "bis ein bestimmtes Element angezeigt wird ≒ bis die Aktualisierung erfolgreich ist". Wenn es nicht innerhalb der von WebDriverWait (Browser, 10) angegebenen 10 Sekunden aktualisiert werden kann, wird ein Timeout-Fehler zurückgegeben.

Der Punkt, an dem ich Ecken schneide

Da es nur in der Übung verwendet wird, habe ich es unterlassen, zu überprüfen, ob es sich um eine E-Mail-Adresse mit einem regulären Ausdruck handelt, und zu verarbeiten, wenn das Argument umgekehrt wird.

Recommended Posts

"Lassen Sie Python die langweiligen Dinge tun" Übung ~ Befehlszeilen-Mailer ~
Erhalten Sie das Formular in Python und führen Sie verschiedene Aktionen aus
[Version 2020] Lassen Sie Python alle Steuer- und Take-Home-Berechnungen durchführen
Python Hinweis: Stellen Sie fest, ob das Befehlszeilenargument in der Liste enthalten ist
MoneyForward Cloud Automatisiert Zeitstempel [Lassen Sie Python die Probleme machen]
Python-Standardmodul, das in der Befehlszeile verwendet werden kann
Befehlszeilenargumentverarbeitung (Python docopt)
Probieren Sie das Python LINE Pay SDK aus
Im Python-Befehl zeigt Python auf Python3.8
Befehl für das aktuelle Verzeichnis Python
Erhalten Sie weiterhin RSS in der Befehlszeile
Lassen Sie Heroku die Hintergrundverarbeitung mit Python durchführen
[Python] Fassen Sie die rudimentären Dinge über Multithreading zusammen
Lesen Sie die Datei Zeile für Zeile mit Python
Zerlegen Sie Befehlsargumente in einer Zeile in Python
Sie suchen in der Befehlszeile nach commandlinefu
[Python] Lesen Sie die angegebene Zeile in der Datei
Korrespondenznotiz, wenn die Richtungstaste nicht in der Python-Befehlszeile verwendet werden kann