hmm das ist jetzt nicht so schön für mich :-(.
Ich habe gehofft das der Browser eine API für die Steuerung anbietet die man dazu benutzen könnte.
Danke für Eure antworten.
Gruß Mücke
hmm das ist jetzt nicht so schön für mich :-(.
Ich habe gehofft das der Browser eine API für die Steuerung anbietet die man dazu benutzen könnte.
Danke für Eure antworten.
Gruß Mücke
Aber das ganze ist dennoch ziemlich instabil, verglichen mit dem Zugriff auf eine API.
Das klingt interessant, welche API meinst du damit? eine des Browsers?
wie muss ich mir das vorstellen?
Alles klar dann habe ich das endlich richtig verstanden :-).
Danke für eure Unterstützung.
Gruß Mücke
alles klar den teil habe ich raus geschmissen,
habe auch gerade bemerkt das ich die Variablen bei mir gar nicht benutze
den Aufruf der URL habe ich so umgeschrieben, hoffe das ich das richtig versanden habe.
$oIE = _IECreate($f_URL)
Jetzt ist für mich noch nicht ganz klar ob mein Script wartet bis die Seite auch nach dem Absenden des Formulares wartet bis die Seite vollständig geladen ist.
Ja du hast recht es werden Teile per JS geladen zumindest ist im Quellcode JS zu sehen.
Ich möchte ungern einen WebShop hier im Forum nennen.
Gruß Mücke
Hey Musashi,
da habe ich auch schon dran gedacht und habe die Webseite mal beobachtet, ab und an bleibt das ganze teil stehen und das für mehrere Sekunden 5 - 8 Sekunden)
da ich ca. 12.000 Suchbegriffe suchen lasse summiert sich das auf eine ziemliche zeit hoch wenn man das mit einem Sleep() machen würde.
ich habe den Befehl _IELoadWait($oIE,0) beim Webseiten Aufruf mit drin. Die Hilfe sagt:
ZitatPausiert das Skript bis eine Seite im Browser fertig geladen wurde
ich bin mir nur nicht sicher wie ich das einbauen kann wenn ich ein Formular absende. was muss ich dann anstelle des $oIE eintragen?
Gruß Mücke
Hallo miteinander,
ich habe den verdacht das mein Script schneller ist wie mein Webbrowser und somit gelegentlich Fehlerhafte Daten zustande kommen.
ich rufe eine Webseite auf und Fülle dort ein Suchfeld aus das Ergebnis möchte ich dann einlesen, das klappt auch sehr gut, jedoch ist mir bei Stichproben aufgefallen das manche Suchen ins leere laufen die nicht ins leere laufen wenn ich es von Hand mache.
Wenn ich mein Script dann nur mit der einen Suche Füttere klappt es auch einwandfrei.
Daher habe ich die Befürchtung das mein Script schneller ist wie die Webseite und ich noch einen Alten HTML Code untersuche.
Daher stelle ich mir die Frage wie ich sicherstellen kann das die Webseite zu 100% geladen ist nach dem absenden eines Formulars.
Das ist mein Code:
Func _WebseiteLaden($f_URL)
$oIE = _IECreate($f_URL, 0, 1, 0, 1)
$hIE = HWnd($oIE.HWND)
_IELoadWait($oIE,0)
EndFunc ;==> _WebseiteLaden
Func _Suche_eintragen($fSuche)
$oForm = _IEFormGetObjByName ($oIE, "jqs-main-search-form") ; Zeiger auf Formular
$oQuerySuche = _IEFormElementGetObjByName ($oForm, "jqs-main-search-query") ; Zeiger auf Suchfeld
_IEFormElementSetValue ($oQuerySuche,$fSuche) ; Suche eintragen
_IEFormSubmit($oForm) ; Senden
EndFunc ;==> _Suche_eintragen
Alles anzeigen
Ich hoffe ihr wisst was ich meine, und es gibt eine einfache Lösung dafür.
Gruß Mücke
Ich habe es gefunden, wie ich in einem String suchen kann
_StringBetween
jetzt bekomme ich das raus was ich möchte.
Sorry für den Beitrag, hat sich erledigt somit :-).
Gruß Mücke
Hallo miteinander,
ich habe es hin bekommen eine Webseite zu Öffnen, dort etwas in die Suche einzutragen und mir die Ergebnisse anzuzeigen.
Jetzt versuche ich aus den vielen Artikeln die ich bekomme den richtigen Artikel zu identifizieren.
Doch genau da ist mein Knackpunkt.
ich habe den Quelltext hiermit gezogen.
Dann habe ich eine Fehlerprüfung gemacht.
If (StringInStr($fHTML, $fFehler) <> 0) or (StringInStr($fHTML, "Firmenname") = 0) Then
MsgBox($MB_SYSTEMMODAL, "Ergebnis", "Artikel nicht gefunden", 1)
return "Artikel nicht gefunden" ;** Wenn Artikel nicht gefunden wurde, ist dies der Rückgabe wert der Funktion
EndIf
Jetzt bin ich mir sicher das zumindest von der Gesuchten Firma ein Artikel mit aufgelistet ist. Den möchte ich nun identifizieren.
Der Quellcode der Seite ist an der Stelle so aufgebaut.
<div class="prod-thumb prod-thumb-l ">
<a class="" href="/artikel/.....-ARTIKELNUMMER" title="..... ARTIKELNUMMER">
<div class="prod-thumb-frame">
<img class="t" src="https://media1mi......jpg" alt="..... ARTIKELNUMMER">
</div>
</a>
<a href="/artikel/.....-rc1703">
<span class="prod-label cleared">..... RC1703</span>
</a>
<span class="current-price">NN,NN €</span>
</div>
Alles anzeigen
Für jeden gefunden Artikel gibt es diesen Teil nur das die anderen im der ersten DIV in der class eine Erweiterung stehen haben "offset1" bzw. "offset2" usw.
Daher ist die Frage wie ich nun meinen Artikel (mir ist die Artikelnummer und der Hersteller bekannt Identifizieren kann, denn ich möchte eigentlich den Preis gerne wissen.
Was auch ein Idee von mir war den entsprechenden Link zu Öffnen der im Link Text "ARTIKELNUMMER" drin stehen hat, denn dann hätte ich den Richtigen Artikel alleine auf der Seite stehen ich glaube das das dann einfache ist die entsprechenden Daten zu lesen.
Könntet Ihr mir da etwas weiter helfen?
Stehe gerade auf dem Schlauch. und bin totaler Frischling in AutoIT
Gruß Mücke
Hey Andy,
Sorry das ich mich so lange nicht gemeldet habe.
Ok, dann muss ich das wider so machen.
Hatte gehofft das es da was gibt das wir etwas Arbeit abnehmen würde :-).
Gruß Mücke
Hallo miteinander,
Ich habe vor etwas längerem mir ein Tool geschrieben um bestimmte Daten von einer Webseite per Knopfdruck auszulesen und in ein Text Datei zu schreiben.
Jetzt würde ich das gerne auf für eine Andere Seite erstellen, jedoch wies ich noch das ich mich echt schwer getan habe damit immer die Richtige Stelle zu finde die ich auslesen musste.
denn ich musste immer angeben welche HTML Teile um meinen Gesuchten Text liegen das ich diesen richtig auslesen konnte.
Daher meine Frage, gibt es ein Tool, das man für so etwas verwenden kann? z.B. das man nur etwas Markiert auf einer Webseite und das sagt einem dann wie man es am besten auslesen kann?
Das Programm das ich mir damals geschrieben habe war am Schluss sehr komplex da ich vieles noch nachträglich einbauen musste, da ich das am Anfang noch nicht wusste wie das geht.
Das würde ich diesmal gerne vermeiden, und sich daher schon mal im Vorfeld nach ein Paar Dingen die es schon gibt oder ein Seite die sich mit dem Thema auseinander setzt das ich mich einlesen kann.
Würde mich freuen ein Paar Infos von euch zu bekommen.
Gruß Mücke
Wow, das klappt danke.
kann mir da noch jemand was zu sagen, mit der Aussage aus der Hilfe kann ich nichts anfangen
GUICtrlSetState(-1, $GUI_DISABLE)
; Ändert den Status des Steuerelements. ==> Die Kontrolle wird ausgegraut.
Musashi warum das bei dir Ohne DLL geht verstehe ich nicht, bei mir klappt dein Beispiel leider nicht
Gruß Mücke
Hallo Oscar , alles klar werde ich so machen. Danke für den Hinweis.
Musashi , das mit dem einbinden der dll hat gut geklappt, danke.
Jetzt ist nur noch das Problem das ich mit der Maus das Formular nicht mehr anwählen kann sobald das Hintergrund Bild geladen ist.
ich habe ein kleinen Muster Code gemacht, der das verdeutlicht.
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <FontConstants.au3>
HotKeySet("{ESC}", _EXIT)
_GUI_Test()
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Func _GUI_Test()
$ID_GUI_Formular = GUICreate("Sleep-Timer", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP) ; GUI erstellen
GUISetBkColor("0x000000", $ID_GUI_Formular) ; GUI Background Color
GUISetFont("30", $FW_NORMAL, $GUI_FONTNORMAL, "Calibri", $ID_GUI_Formular) ; GUI Schriftgröße und Art Einstellen
GUICtrlCreatePic(@ScriptDir & "\Wallpaper.bmp", 0, 0, @DesktopWidth, @DesktopHeight) ; GUI Background PIC laden
$idLabelCheckbox_3 = GUICtrlCreateCheckbox("Das ist ein Test", 100, 100, 300, 100, $BS_MULTILINE) ; Label Checkbox erstellen
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($idLabelCheckbox_3), "wstr", 0, "wstr", 0) ; Wird benötigt damit der hintergrund Transparent werden kann
GUICtrlSetBkColor($idLabelCheckbox_3, $GUI_BKCOLOR_TRANSPARENT) ; Label Checkbox Hintergrund Transparent
GUICtrlSetColor($idLabelCheckbox_3, 0xffffff) ; Label Checkbox Frontfarbe Burgund
EndFunc ;==>_GUI_Formular
func _EXIT()
Exit
EndFunc
Alles anzeigen
wenn man Zeile 20 raus nimmt, oder das Bild nicht gesetzt werden kann dann kann das Formular mit der Maus angewählt werden.
Sobald ein Bild jedoch gesetzt werden konnte kann man das Formular nicht mehr mit der Maus bedienen.
Woran liegt das?
was muss ich machen das ich trotz Bild die Maus verwenden kann?
Ihr müsst im Programm Ordner einfach ein Bild mit dem Namen Wallpaper.bmp das wird dann geladen und automatisch auf Desktop Größe gestreckt.
gruß Mücke
Hallo miteinander,
Jetzt habe ich die Hintergrunde mit eingebaut.
Zwei Dinge bekomme ich nicht zum laufen bzw. eins kann ich mir nicht erklären
Da ein Hintergrund (Bild) gesetzt wurde habe ich alle Label`s den Hintergrund auf transparent gestellt, das klappt auch bis auf die GUICtrlCreateCheckbox wie kann ich hier den Hintergrund auf transparent stellen?
Das andere ist, wenn ich bei der Func _GUI_Formular() einen Hintergrund erfolgreich gesetzt habe kann ich das Formular nur noch mit der Tastatur ansteuern, die Maus geht dann nicht mehr (also ich kann die Felder nicht mehr auswählen)
Was mache ich da Fehlerhaft?
gruß Mücke
ps. da jetzt die INI Datei und das Programm sich geändert haben wider beide Datei im Anhang.
aus .txt muss wider .ini gemacht werden.
Die Bilder für den Hintergrund müssen in den Programmordner/Wallpaper stehen.
Die Betreffenden Zielen sind
396 und 519
Code Ausschnitt:
Func _GUI_Formular()
$ID_GUI_Formular = GUICreate("Sleep-Timer", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP) ; GUI erstellen
GUISetBkColor($GUI_Formular_BG_Color, $ID_GUI_Formular) ; GUI Background Color
GUISetFont($GUI_Formular_Font_Size, $FW_NORMAL, $GUI_FONTNORMAL, "Calibri", $ID_GUI_Formular) ; GUI Schriftgröße und Art Einstellen
GUICtrlCreatePic($GUI_Formular_BG_Pic, 0, 0, @DesktopWidth, @DesktopHeight) ; GUI BG laden
...
$Text = $Formular_Info_Text_3
$X = $Formular_Links
$Y = $Y + $Hohe + $Formular_Trennen
$Breite = $Formular_Breite
$Style = $BS_MULTILINE
Local $idLabel = GUICtrlCreateCheckbox($Text, 0, 0, $Breite, -1, $BS_MULTILINE) ; Muster Label erstellen
Local $aPos = ControlGetPos($ID_GUI_Formular, '', $idLabel) ; so viel Platz brauchen wir
GUICtrlDelete($idLabel) ; Muster Label Löschen
Local $Formular_Checkbox_Hohe = $aPos[3]
LOcal $Formular_Checkbox_Breite = $aPos[2]
$Hohe = $Formular_Checkbox_Hohe
$idLabelCheckbox_3 = GUICtrlCreateCheckbox($Text, $X, $Y, $Breite, $Hohe, $Style)
GUICtrlSetBkColor($idLabelCheckbox_3, $GUI_BKCOLOR_TRANSPARENT) ; Label Hintergrund transparent
EndFunc ;==>_GUI_Formular
Alles anzeigen
Gruß Mücke
So die INI Datei habe ich jetzt mit eingebunden man kann somit über die INI Datei jetzt das aussehen des Programms beeinflussen.
Daher gibt es einen Neuen Code inklusive einer INI Datei im Anhang.
Ich habe auch die Idee von Tuxedo für die Übernahme der tatsächlichen zeit übernommen.
Wobei noch immer 3 Stellen angezeigt werden beim Spielen. (das mit den zwei stellen mache ich auch noch Später).
Was mir aufgefallen ist, wenn ich zwischen den GUI`s umschalte dann sehe ich für einen Bruchteil immer meinen Desktop das möchte ich nicht,
daher habe ich die Func _GUI_setzen() überarbeitet.
Ich blende zuerst die Neue GUI ein und dann blende ich die alten GUI`s alle aus.
Beim Schnellen hin und her springen kommt immer noch ab und an der Desktop durch naja das ist dann jetzt so.
Als nächstes baue ich die Bilder ein, so das man der GUI auch ein Hintergrund Bild geben kann. (das mache ich aber erst heute Abend schätze ich.
Deine Stoppuhr entwickelt sich langsam zu einem Großprojekt was?
so könnte man das auch ausdrücken, sie bekommt immer mehr Dinge implementiert bis sie so ist wie ich sie im Kopf mir vorgestellt hatte.
Das das ganze sich so lange hinzieht hätte ich jedoch zu beginn nicht gedacht.
Gruß Mücke
ps. INI Dateien können scheinbar nicht hochgeladen werden, daher muss die Endung von .txt auf .ini wider bei euch geändert werden !
Hi Musashi ,
Oh man da habe ich gerade gar-nicht dran gedacht, danke für den Hinweis, da habe ich total vergessen.
DANKE.
gruß Mücke
Hey Tuxedo,
das leuchtet irgend wie ein, was du da sagst. muss ich mir noch mal durch den Kopf gehen lassen.
Was das Wird.
Wir haben auf einem Messestand ein Kleines Spiel da muss der User etwas zusammen bauen, und diese Zeit wollen wir Stopfen, der bester Player am Tag kann dann was gewinnen.
Die Musik Untermalung war z.B. für so was gedacht
https://www.youtube.com/watch?v=Y4QbJRAWvRU
von der zeit ca. 0:53 bis ca. 0:57 Minuten.
Als Dauerschleife.
ich mache mir mal Gedanken heute dazu mit der zeit anzeige, und dann würde ich die INI Datei noch erstellen und einbinden.
Danach kümmere ich mich um die Hintergrund Bilder und danach um die Musik
jetzt gerade so beim Schreiben gefällt mir die Idee nur zwei nachkommastellen anzuzeigen jedoch beim Speichern 3 nachkommastellen zu haben.
So das Formular wird jetzt auch wider zurück geätzt, ich habe mit den Labels
$idLabelCheckbox_2 = GUICtrlCreateCheckbox($Text, $X, $Y, $Breite, $Hohe, $Style)
ein Problem.
Wenn die einmal angeklickt waren bekomme ich die nicht wieder zurück gesetzt, sprich so das als wenn sie nicht angeklickt waren.
ich schaffe es den Label text zu ändern doch das wollte ich nicht
Erstellt werden 3 Stück in der Func _GUI_Formular() dort ganz unten.
Status Änderung sollte in der Func _Formular_Speichern() (auch ganz unten, stattfinden.
könnte mir da jemand weiterhelfen?
ps. ich habe den Programm Code etwas durch gemischt und Größere Blöcke Kommentar eingefügt, das man eher sieht wo was anfangen tut und wo aufhören.
Gruß Mücke
[EDIT] Frage von oben hat sich erledigt. habe gerade was gefunden anstelle von GUICtrlSetData() verwendet man hier GUICtrlSetState() Befehl/Makro.
jetzt kann ich mich dran machen und die INI Datei anbinden
Hallo Muecke, muss dich leider nochmal entäuschen, ...toppuhr-GUI5.au3
Grundsätzlich so etwas ist keine Enttäuschung sonder Bug Bewältigung ist doch gut wenn etwas auffielt und so das Programm runder und sauberer wird.
Jedoch kann ich dir nicht ganz folgen. Bitte hilf mir etwas auf die Sprünge:
In der Funktion HotKeyPressed solltest du dir einen Weg überlegen um direkt beim Beenden der Stoppuhr die Aktuelle Zeit zu ermitteln, denn was bringen schon Millisekunden wenn sie denn nicht stimmen.
Momentan würde die Gesamtzeit bei Spielende durch die Sleep-Time verfälscht, das wären zwar hier nicht allzuviel aber falsch ist eben falsch.oppuhr-GUI5.au3
In Zeile 170 wird doch die Bildschirmzeit in die Variable $Player_Zeit geschrieben, und die $Player_Zeit wird dann im Formular dargestellt wie auch gespeichert.
Diesen weg habe ich mit Absicht so gewählt, denn wenn am Monitor eine andere Zeit steht als die im Formular würde sich der Spieler aufregen und sagen das gemogelt wird, und das wollte ich vermeinten.
Sollte ich mit meiner Annahme daneben liegen, sag beschied.
Aber den Sleep auf jeden Fall drin lassen, sonst hast nur unnötige CPU-Last.
Drin lassen möchte ich diesen schon, im Quellprogramm von Bitnugger war jedoch eine Möglichkeit eingebaut die Sleep zeit im laufe des Timers zu verändern das finde ich ganz witzig, denn so könnte man die Geschwindigkeit der Aktualisierung an den Rechner auf dem das Prog laufen tut anpassen
Du kannst den Inhalt eines Controls mit GUICtrlSetData setzen, das solltest du machen nachdem die GUI erzeugt wurde aber bevor sie angezeigt wird.
Alles klar dann wies ich was ich machen muss. Danke.
PS. wie bekomme ich meinen Code etwas übersichtlicher dargestellt?
Ich finde das in zwischen echt durcheinander. Habt Ihr eine Idee?
gruß Mücke
[EDIT]
Angenommen ich würde alle Funktionen für die erstellen der GUI in eine Seerate Datei parken kann ich die dann mit include wider einbinden?
habe das getestet, doch das Programm funktioniert auf den ersten blick, der Compiler meint jedoch das die Globalen Variablen nicht deklariert wären in der importierten Datei.
macht man das anders? oder auf was muss ich achten?
naja, ein nach dem anderen jetzt schaue ich erst das mein Formular wider auf Anfang sich setzt sobald alle werte gespeichert wurden.
So jetzt habe ich hoffentlich alles was Ihr geschrieben habt noch in meinem Code ausgewechselt, so das die Uhr jetzt auch deutlich schneller laufen kann
(mich hatte das irgend wie nicht gestört gehabt)
ich habe das Formular jetzt mit drin und es wird auch gespeichert, ich bekomme es nur nicht hin die Formularfelder nach dem Speichern wider zurück zu setzen
Was muss ich da machen?
Muss ich das GUICtrlCreateInput bearbeiten? mit GUICtrlSetData ? oder macht man das anders?
so langsam wird der Code lang und unübersichtlich finde ich.
ps. ich bin am überlegen ob die die Sleep Funktion von beginn wider einbauen soll, ich fand das eine echt coole Spielerei aktuell steht Sleep auf 44.
Gruß Mücke