Projekt: CSV-Datei von Homepage downloaden, bearbeiten und in SQL-DB schreiben

  • Hallo Forum,

    ich bin dabei mein erstes Projekt in Autoit zu erstellen.
    -------------------------------------------------------------------------------------------------------------------------
    Ziel soll folgender Programmablauf sein:
    1. Anmeldung auf einer Homepage
    2. Erstellen einer CSV-Datei via PHP
    3. Download der Datei und in Excel öffnen
    4. Suchen&Ersetzen von einigen Werten
    5. Datei abspeichern
    6. über CMD die Datei in die DB importieren (den Import erledigt ein extra Programm)
    -------------------------------------------------------------------------------------------------------------------------


    Punkte 1-3 habe ich bereits realisiert.
    Vielleicht findet ja der Ein oder Andere noch Verbesserungspotential :D
    ...generell würde ich das Fenster gerne im Hintergrund öffnen aber bei _FFStart kommt es da zum Absturz
    ...auch die Steuerung des Downloaddialogs ist nur behelfmäßig realisiert :wacko:

    [autoit]

    ; Script zum Download einer CSV-Datei
    ; http://german.documentation.ff-au3.thorsten-willert.de/

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; Aufrufe
    #Include <FF.au3>

    [/autoit][autoit][/autoit][autoit]

    ; Variablen definieren
    $sURL_login = "http://www.example.com"
    $sURL_getCSV = "http://example.com/getExportCSV.php"
    $sUser = "Username"
    $sPass = "Password"

    [/autoit][autoit][/autoit][autoit]

    ; Starte Webseite
    _FFStart($sURL_login, "", 1, 0)

    [/autoit][autoit][/autoit][autoit]

    ; Anmeldung
    If _FFIsConnected() Then ; überprüfen ob die Verbindung besteht
    _FFSetValue($sUser, "7", "sourceindex") ;Benutzername
    _FFSetValue($sPass, "6", "sourceindex") ;Passwort
    _FFFormSubmit("8", "sourceindex")

    [/autoit][autoit][/autoit][autoit]

    ; Generiere Downloaddatei
    _FFStart($sURL_getCSV, "", 2)
    _FFLoadWait()

    [/autoit][autoit][/autoit][autoit]

    ; Steuere Downloaddialog
    WinWaitActive("[CLASS:MozillaDialogClass]")
    Sleep(2000)
    ;Send("!s")
    ;Sleep(2000)
    Send("{ENTER}")

    [/autoit][autoit][/autoit][autoit]

    ; Schließe Fenster
    _FFQuit()

    [/autoit][autoit][/autoit][autoit]

    Else
    MsgBox(64, "Fehler:", "Es konnte keine Verbindung zu FF hergestellt werden.")
    EndIf

    [/autoit]

    Bei der Excelbearbeitung suche ich noch nach einer Funktion, die mir die Kopfzeile auf einen bestimmten Spaltennamen usliest und in dieser die Funktion Suchen&Ersetzen anwendet.


    mfg


  • Vielleicht findet ja der Ein oder Andere noch Verbesserungspotential :D

    Nimm lieber den IE. Die FF-UDF wurde schon eine weile nichtmehr aktuallisiert bzw. Mozrepl schon viel länger nichtmehr.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo Chip,

    mit IE.au3 habe ich mein erstes Script geschrieben, bin aber dann am Download der Datei hängen geblieben.
    Dies kann ich nicht so einfach steuern wie den FF.

    Oder hast du hierzu eine Lösung?

    mfg


  • mit IE.au3 habe ich mein erstes Script geschrieben, bin aber dann am Download der Datei hängen geblieben.

    Ein Datei kannst mit

    [autoit]

    InetGet

    [/autoit]


    runterladen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.


  • Ein Datei kannst mit

    [autoit]

    InetGet

    [/autoit]


    runterladen.

    Hatte ich auch probiert.
    Nur leider wird die Datei im Temp erzeugt und es gibt keinen statischen Downloadlink

  • Wenn im zweiten Paramter "filename" einen Pfad angibst wird es dort gespeichert.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hmm...
    ...die Datei wird erzeugt und steht auch zum DL bereit.

    Aber so funktioniert die Anweisung leider nicht:

    [autoit]

    InetGet($sURL_login, @TempDir & "\test.csv" , 0, 0)

    [/autoit]

    Weißt du wo da das Problem liegen könnte?

  • Probier es mal so:

    [autoit]

    InetGet($sURL_login, @TempDir & "\test.csv" , 1)

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Bringt leider auch keine Verbesserung.

    Vielleicht hier das ganze Script:

    [autoit]

    ; Aufrufe
    #include <IE.au3>

    [/autoit][autoit][/autoit][autoit]

    ; Variablen definieren
    $sURL_login = "http://www.example.com"
    $sURL_getCSV = "http://example.com/getExportCSV.php"
    $sUser = "Username"
    $sPass = "Password"

    [/autoit][autoit][/autoit][autoit]

    ; Starte Webseite
    $oIE = _IECreate ($sURL_login)

    [/autoit][autoit][/autoit][autoit]

    ; Anmeldung
    If IsObj($oIE) Then ;Seite wurde geöffnet
    _IELoadWait($oIE) ;Seite fertig geladen
    $oForm = _IEFormGetObjByName($oIE, "loginbox") ;erzeuge HTML-Objekt
    $oUsername = _IEFormElementGetCollection ( $oForm, 5) ;Eingabefeld Benutzer hat Index
    _IEFormElementSetValue($oUsername, $sUser) ;Inhalt Benutzer
    $oPasswd = _IEFormElementGetCollection ( $oForm, 6) ;Eingabefeld Passwort hat Index
    _IEFormElementSetValue($oPasswd, $sPass) ; Inhalt Passwort
    _IEFormSubmit($oForm) ;Formular absenden
    EndIf

    [/autoit][autoit][/autoit][autoit]

    _IELoadWait($oIE) ;Seite fertig geladen
    Sleep(2000)

    [/autoit][autoit][/autoit][autoit]

    ; Download Datei erzeugen
    _IENavigate($oIE, $sURL_getCSV)
    _IELoadWait($oIE) ;abgeschlossen

    [/autoit][autoit][/autoit][autoit]

    ; Datei Downloaden
    InetGet($sURL_login, @TempDir & "\test.csv" , 1)

    [/autoit][autoit][/autoit][autoit]

    Msgbox(0, "", "Laden abgeschlossen")

    [/autoit]
  • Kann ja auch nicht gehen. Du übergibts den Seitenlink ($sURL_login) an InetGet. Du musst aber den Link zur Datei übergeben. Ich vermute mal das ""http://example.com/getExportCSV.php"" das CSV zurück liefert. Dann müsste das heißen:

    Spoiler anzeigen
    [autoit]

    ; Aufrufe
    #include <IE.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; Variablen definieren
    $sURL_login = "http://www.example.com"
    $sURL_getCSV = "http://example.com/getExportCSV.php"
    $sUser = "Username"
    $sPass = "Password"

    [/autoit] [autoit][/autoit] [autoit]

    ; Starte Webseite
    $oIE = _IECreate ($sURL_login)

    [/autoit] [autoit][/autoit] [autoit]

    ; Anmeldung
    If IsObj($oIE) Then ;Seite wurde geöffnet
    _IELoadWait($oIE) ;Seite fertig geladen
    $oForm = _IEFormGetObjByName($oIE, "loginbox") ;erzeuge HTML-Objekt
    $oUsername = _IEFormElementGetCollection ( $oForm, 5) ;Eingabefeld Benutzer hat Index
    _IEFormElementSetValue($oUsername, $sUser) ;Inhalt Benutzer
    $oPasswd = _IEFormElementGetCollection ( $oForm, 6) ;Eingabefeld Passwort hat Index
    _IEFormElementSetValue($oPasswd, $sPass) ; Inhalt Passwort
    _IEFormSubmit($oForm) ;Formular absenden
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _IELoadWait($oIE) ;Seite fertig geladen
    Sleep(2000)

    [/autoit] [autoit][/autoit] [autoit]

    ; Datei Downloaden
    InetGet($sURL_getCSV, @TempDir & "\test.csv" , 1)

    [/autoit] [autoit][/autoit] [autoit]

    Msgbox(0, "", "Laden abgeschlossen")

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Das hatte ich natürlich auch schon probiert.

    Leider wird mir dann eine CSV mit folgendem Inhalt erstellt:

    Code
    ERROR: Not logged in!

    Im IE ist nach wie vor die Datei zum DL bereit.
    Über die Entwicklertools ist der Link unter Netzwerk/Antwortheader als Rükgabewert enthalten:

    Code
    Condent-disposition: attachment; filename=csvexport_20130218-235306.csv


    kann ich den irgendwie verwenden?

  • es wird doch sicherlich ein downloadlink erzeugt oder?

    diesen brauchst du doch nur mit IEAction zu steuern ...

    $oSubmit=_IEGetObjByName($oIE,"submitExample")
    _IEAction($oSubmit,"click")

    eventuell den namen des elementes auch mal mit firefox und dem plugin firebug auslesen!

    gruß gmmg