[PYTHON] Betreiben Sie Webseiten automatisch mit dem Selenium-Webdriver

Überblick

Ich verwende eine Software namens Attendance Pro für die Anwesenheitseingabe, habe jedoch versucht, sie mithilfe des Selenium-Webtreibers zu automatisieren, da die tägliche Eingabe problematisch ist. Es ist eine sehr naive Methode, aber ich bin nicht sehr daran gewöhnt, also als erster Schritt. Machen Sie es auch zu einer Exe, damit andere Personen als Sie selbst und Personen ohne Python-Umgebung es verwenden können.

(8/21 Nachschrift) Zuerst habe ich den Web-Treiber von Chrome verwendet, aber da der Browser jedes Mal gestartet wird, habe ich PhantomJS als Headless-Browser verwendet. Laden Sie PhantomJS von hier herunter und geben Sie den Pfad des Ordners mit phantomjs.exe in der Umgebungsvariablen Path an.

Umwelt und Vorbereitung

Die Hauptsoftwareumgebung ist wie folgt. OS: Windows 10 Python: 2.7.12 Selenium: 3.5.0 PyInstaller: 3.2.1 PhantomJS: 2.1.1

Ich hatte kein Selen, Pyinstaller usw., also habe ich es mit Pip installiert.

pip install selenium
pip install pyinstaller
pip install ctype

Code

Anwesenheit und Abreise sind in separaten Dateien (exe). Ich gehe nur hier zur Arbeit, aber es ist fast das gleiche.

attendancepro_start.py


import sys
import os
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.support import ui
from selenium.webdriver.common.keys import Keys
import time
from ctypes import *

#Geben Sie zum Verteilen mit exe jedes Mal den Benutzernamen und das Kennwort an
username = sys.argv[1]
password = sys.argv[2]

user32 = windll.user32

def page_is_loaded(driver):
    return driver.find_element_by_tag_name("body") != None

#Laden Sie den Browsertreiber.
# driver = webdriver.Chrome("./chromedriver.exe")Ursprünglich in Chrome implementiert, aber wie folgt geändert
driver = webdriver.PhantomJS(service_log_path=os.path.devnull)
#Laden Sie die Zielseite. Zuerst die Anmeldeseite.
driver.get("https://attendance.cvi.co.jp/LogOn.aspx")
wait = ui.WebDriverWait(driver, 10)
wait.until(page_is_loaded)

#Nach dem Laden finden_element_by_Holen Sie sich das Element, indem Sie es mit xpath angeben, und geben Sie die Eingabe ein.
#Zeigen Sie im Voraus die Quelle der Webseite im Browser an und suchen Sie nach der ID des Formulars, das Sie eingeben möchten.
email_field = driver.find_element_by_xpath("//*[@id=\"txtUserID\"]")
email_field.send_keys(username)

company_field = driver.find_element_by_xpath("//*[@id=\"txtCompanyCode\"]")
company_field.send_keys("xxx")

password_field = driver.find_element_by_xpath("//*[@id=\"txtPassword\"]")
password_field.send_keys(password)

#Nach Eingabe aller, Bildschirmübergang
password_field.send_keys(Keys.RETURN)
wait = ui.WebDriverWait(driver, 10)
wait.until(page_is_loaded)
time.sleep(5)

#Geben Sie in ähnlicher Weise die ID des Ortes an, den Sie eingeben möchten, und geben Sie die Eingabe ein.
#Hier der Status des Submit-Elements(enabled/disabled)Die Fälle sind geteilt durch.
#Die MessageBox ermöglicht es auch zu wissen, um welchen Zweig es sich handelt.
if driver.find_element_by_xpath("//*[@id=\"ctl00_ContentMain_btnWebStartTime\"]").is_enabled():
    driver.find_element_by_xpath(
        "//*[@id=\"ctl00_ContentMain_btnWebStartTime\"]").click()  # Send day start
    user32.MessageBoxA(
        0,
        "Start done",
        "AttendancePro",
        0)
else:
    user32.MessageBoxA(
        0,
        "Start already done",
        "AttendancePro",
        0)

#Wenn Sie fertig sind, Browser und Verknüpfungen(Siehe unten)Schließen Sie das Fenster und verlassen Sie es.
driver.close()
os.system('taskkill /fi "WindowTitle eq attendancepro_start"')
sys.exit()

exe Umwandlung

Konvertieren Sie mit dem folgenden Befehl in exe. ico ist angemessen. pyinstaller --clean -F --icon=xxx.ico attendancepro_start.py

Testen Sie zu diesem Zeitpunkt die resultierende Exe unten. Anwesenheitspro_start.exe <Benutzername> <Kennwort> Wenn Sie den Chrome-Treiber verwenden, legen Sie ihn im selben Ordner wie exe ab.

Nach der Verteilung erforderliche Aktionen

Da die Ausführung jedes Mal an der Eingabeaufforderung schwierig ist, wird davon ausgegangen, dass exe als Verknüpfung ausgeführt wird. Argumente werden in den Verknüpfungseigenschaften angegeben. image

Bei dieser Methode bleibt das Eingabeaufforderungsfenster am Ende, sodass Taskkill verwendet wird, um das Fenster am Ende zu schließen. Ich glaube nicht, dass ich das normalerweise mache, aber ich wusste nicht, wie ich es einfach machen soll, also mache ich es ...

Verschiedene Gefühle

Es war viel einfacher. Außerdem habe ich gelernt, dass ich Webseiten mit Python betreiben kann, also hoffe ich, dass es auf etwas angewendet werden kann. Python3.x ist fast in Ordnung, aber in MessageBoxA wird nur das erste Zeichen angezeigt, das in der Mitte verwendet wird. MessageBoxW ist in Ordnung, wird aber in Zukunft in 2.x verstümmelt. Da es sowieso in exe verwendet werden soll, werde ich diesmal meine Augen schließen.

Referenz

So legen Sie Elemente einer Webseite in Selen fest

So geben Sie Variablen später in der exe-Version an

Message Box-Parameter

Schließen Sie das Fenster, nachdem Sie die Windows-Verknüpfung ausgeführt haben (https://stackoverflow.com/questions/16599655/how-to-close-a-cmd-window-using-python-2-7).

[In der MessageBox wird nur das erste Zeichen angezeigt](https://stackoverflow.com/questions/38302830/python-message-box-shows-only-the-first-letter-of-my-title-and-my- Botschaft)

Recommended Posts

Betreiben Sie Webseiten automatisch mit dem Selenium-Webdriver
Versuchen Sie, automatisch mit Selen zu twittern.
Web Scraping mit Selenium (Python)
[Python] Einführung in das Scraping | Programm zum Öffnen von Webseiten (Selenium-Webdriver)
Versuchen Sie es mit Selen
Webanwendung mit Flasche (1)
Bedienen Sie den Browser mit den Python-Bindungen des Selenium Web Driver