Inhalt vom Clipboard proper machen - wie geht das ein zweitesmal?

  • Guten Tag zusammen,

    ich hänge beim Versuch, Vor- und Nachname, die in zwei separaten Feldern stehen, richtig mit _StringProper zu behandeln. Der erste Buchstabe soll jeweils groß sein, der Rest klein. Bei einem Feld, das ich mit dreifachem Mausklick "highlighte", mit CTRL+C ins Clipboard lege und dann mit ClipPut (_StringProper($clipboard)) entsprechend geändert ins Clipboard lege, um es dann mit CTRL+V wieder in das Feld zu bringen, funktioniert es.

    Beim zweiten Feld mit der gleichen Prozedur, nur an anderen Koordinaten, wird der Name gelesen, dann aber unverändert wieder ins Feld gelegt.

    Bekanntermaßen sitzt ja der Fehler vor dem Bildschirm - aber wo? ;(

    Hier mal das Skript:

    Spoiler anzeigen

    Danke!

  • Vielleicht werden die ganzen Klick und Send Befehle zu schnell ausgeführt!
    Füge mal nach jedem Klick und Send Sleep Befehle ein:

    Mit Sleep(500)
    [autoit]


    #Include <String.au3>
    #include <ClipBoard.au3>

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

    Opt("WinTitleMatchMode", 2) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase
    WinActivate ("Mozilla")

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

    ; Klickt 3x in das Fenster "Name" zum Aktivieren und Highlighten von "Last Name"
    MouseClick ("left", 605, 540, 3, 0)
    Sleep(500)
    ; "Last Name" wird in das Clipboard gelegt
    Send ("^c")
    Sleep(500)
    ; In die $clipboard Variable wird der Inhalt des Clipboards ausgelesen
    $clipboard = ClipGet()
    ; in das Clipboard wird der nach Proper Methode geänderte String wieder abgelegt - Achtung: Sonderzeichen werden auch als Trenner erkannt, danach kommt ein Großbuchstabe
    ClipPut (_StringProper($clipboard))
    ; Es wird dreimal an die gleiche Stelle geklickt, damit das Fenster wieder aktiv ist und der gesamte Last Name durch die geänderte Version ersetzt werden kann
    MouseClick ("left", 605, 540, 3, 0)
    Sleep(500)
    ; Der Inhalt vom Clipboard wird eingefügt; überschreibt dabei den ursprünglichen Text
    Send ("^v")
    Sleep(500)

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

    MouseClick ("left", 678, 516, 3, 0)
    Sleep(500)
    Send ("^c")
    Sleep(500)
    $clipboard = ClipGet()
    ; in das Clipboard wird der nach Proper Methode geänderte String wieder abgelegt - Achtung: Sonderzeichen werden auch als Trenner erkannt, danach kommt ein Großbuchstabe
    ClipPut (_StringProper($clipboard))
    ; Es wird dreimal an die gleiche Stelle geklickt, damit das Fenster wieder aktiv ist und der gesamte First Name durch die geänderte Version ersetzt werden kann
    MouseClick ("left", 678, 516, 3, 0)
    Sleep(500)
    Send ("^v")
    Sleep(500)
    Exit

    [/autoit]
  • Danke an Cyberdyne! :thumbup:
    Mit Sleep (100) nach dem ersten Send ("^c") geht es.
    Ich weiß, daß das eine ziemlich wackelige Methode ist, aber ich weiß nicht, wie ich das anders machen soll. Controls finde ich nicht, wenn ich die Maus bei Window Info über die ganze Seite schiebe.

    Bei diesen Feldern handelt es sich um Vor- und Nachname auf einer Webseite. Um die zu ändern, muß man erst eine Zeile doppelklicken, dann geht ein separates Fenster in der Bildschirmmitte auf und darin kann man dann erst in zwei Feldern Vorname, Nachname und ändern; das dritte ist ein Auswahlfeld mit Frau/Herr/Dr./Prof.

    Dann wird das Fenster mit Klick auf "OK" geschlossen und man ist wieder zurück auf der Webseite. Um die Änderungen zu speichern, muß ein "SAVE" Button angeklickt werden.

    Ich habe auch schon versucht, den Inhalt der Datenfelder aus dem html Text auszulesen. Das gelingt mir prinzipiell, aber diese Datenfelder gibt es zweimal im Text und da bekomme ich dann Vor- und Nachnamen jeweils zweimal in einer Variablen zurück. Soweit habe ich noch nicht kapiert, wie man das nur einmal erhält.

    Der Versuch mit dem Nachnamen schaut so aus:

    Spoiler anzeigen
    Code
    $ganzeseite = _FFReadHTML()
    Local $name_lastName = _StringBetween($ganzeseite, 'name_lastName=', '&amp')
    $name_lastName = _ArrayToString($name_lastName)
    $regex = StringRegExp ($name_lastName, 'name_lastName=')

    Ob ich den Weg weiter verfolge, weiß ich nicht so recht. Das einlesen mit _FFReadHTML() dauert schon erheblich länger, als die Klickerei. Mit Internet Explorer habe ich es noch garnicht versucht. Würde das grundsätzlich auch gehen?

    Danke!

  • Kannst ja mal den Link zur Webseite posten. Normalerweise sollte sowohl die FF.au3 als auch die IE.au3 mit Hilfe der Infos aus dem Quellcode in der Lage sein das Formular auszufüllen und abzusenden. Das mag zwar etwas mehr arbeit machen, dafür ist es aber sehr viel genauer und funktioniert auch noch wenn die Anordnung der Formulare verändert wird, das Borwserfenster eine andere Größe hat oder sonstiges am Design verändert wird. Deine Mouseclick Methode würde schon ins straucheln kommen wenn ein Bild im Seitenkopf plötzlich einige Pixel höher ist oder aus welchem Grund auch immer nicht korrekt geladen wird.

  • Ich stimme Dir komplett zu; ein Link würde aber nix nützen, weil das nur firmenintern verwendet werden darf und ohne Passwort auch kein Zugang möglich ist.

    Ich kann zwar die Daten aus dem html Text auslesen, aber ich habe Ahnung, wie ich dann geänderte Daten wieder zum Server übermitteln würde. Ich könnte zwar eine neue html Seite erstellen, aber die liegt lokal. Es werden aber keine html Dateien zum Server übertragen, sondern nur die Daten der Formulare. Wenn ich den html Source Code richtig verstehe, wird beim Click auf den SAVE button, ein JavaScript gestartet, das die Daten übermittelt. Das ist mir doch ein wenig zu kryptisch.