Webseiten ansprechen im Hintergrund
-
- [ gelöst ]
- sklaim
- Geschlossen
- Erledigt
-
-
Stimmt auch wieder, man kann das ja aber in eine Funktion packen dann ist es weniger aufwändig.
Aber sicherlich ist es besser als Anfänger InetRead + BinaryToString zu nutzen.
Warum sollte es dann weniger aufwendiger sein? Schließlich muss man ja trotzdem die Funktion schreiben und evtl. mit den Pakets rumspielen, InetRead hingegen erledigt das alles für dich. (Und man muss auch nicht mehr z.B. den Header rausparsen o.ä. -
Ich glaube ihr seid etwas vom Thema abgekommen. Dem Fragesteller ist es sicherlich total egal ob es nun 50 ms oder 500 ms braucht um eine Seite aufzurufen.
So wie ich deinen ersten Post lese, hast du es bissher über send() und dergleichen gelöst. Dazu mussen die Controls immer fokusiert sein um etwas eingeben zu können und genau das willst du ändern, richig?
In deinem ersten Post sprichst du über Google. In einem späteren Post erwähnst du dass es nicht nur auf Google bezogen sein sollIst ja auch egal. Wenn es sich nur um Google gedreht hätte, hätte ich dir InetRead() empfehlen können.
Da du es nunn aber allgemein haben willst kann ich nur auf den zweiten Post verweisen. Die _IE Funktionen bieten alles was du brauchst. Du kannst entscheiden ob der Browser sichtbar sein soll oder nicht.
In einem anderen Post hast du dann erwähnt, dass dir das nichts bringt, da dann send() nicht funktioniert, wenn der Browser nicht sichtbar ist.
Die Antwort darauf ist, du wirst send() nichtmehr brauchen und alles mit den _IE Funktionen erledigen können. Dazu musst du aber nunmal die Dokumentation der Funktionen lesen um zu wissen was du brauchst.Einfach die _IE Funktionen von Autoit nutzen. Da kannst du bei _IECreate sagen, dass das Fenster nicht sichtbar sein soll.
-
Darter:
Danke! Du warst bis jetzt (nicht böse gemeint) der Einzige der mir nach der ersten Antwort richtig geantwortet hat!Ich war leider heute arbeiten, deswegen bin ich erst jetzt online.
Vielleicht könntest du mir 2 Beispiele mal erklären mit den _IE Funktionen, weil das mit dem TCP Kram... naja.. sagen wir mal nur: "BAHNHOF".
1. Beispiel:
Den aktuellen Börsenkurs abfragen auf folgender Seite: http://markets.blockchain.info/markets/mtgox/EUR (rechts oben die große Zahl).2. Beispiel:
Im Hintergrund auf dieser Seite einloggen: https://blockchain.info/de/wallet/login wobei der Benutzer GLEICHZEITIG am PC arbeiten kann. Anschließend soll das Fenster sichtbar gemacht werden (also so das man bereits eingeloggt ist)Wenn du mir das mit Code erklären kannst, dann bin ich schonmal ein mächtiges Stück weiter :).
Ps: An alle die das lesen aber mit denen ich nix zu tun habe oder die ich heute nicht mehr spreche: Guten Rutsch ins neue Jahr!
-
Für den Kurs braucht man die IE Funktionen nicht, das ginge auch so:
#include <string.au3>$site = "http://markets.blockchain.info/markets/mtgox/EUR"
$source = BinaryToString(inetread($site,16+1))$aKurs = _StringBetween($source,"<span id='last_price'>","</span>")
If $aKurs <> 0 Then
ConsoleWrite("Der aktuelle Kurs lautet: " & $aKurs[0] & @CRLF)
Else
MsgBox(0,"Fehler","Kurs String wurde nicht gefunden")
EndIf -
Ahja und am besten mal hier lesen, alles andere macht keinen Sinn wenn schon tausend API's zur Verfügung stehen sollte man diese auch nutzen:
-
Ich hoffe du denkst nicht das ich zu faul bin zum suchen, ich weiß einfach noch nicht genau wonach ich immer suchen soll, deswegen find ich wahrscheinlich auch nichts :). Deswegen möchte ich jetzt mal ausdrücklich sagen das ich euch (besonders misterspeed) dankbar bin!
Nun zu deinem vorherigen Post:
Wenn ich hier drauf gehe https://blockchain.info/de/api/exchange_rates_api , steht unten das ich "x" ersetzen soll mit den parametern. Ich verstehe noch nicht ganz wie das gehen soll. Da ist kein "x".^^
Und wie kann ich das jetzt in AutoIt einsetzen? Also ich denke mal wieder mit Inetread() oder? und dann halt der Link oben so angepasst das ich da direkt die Währung und den gewünschten Kurs angebe. Nur das weiß ich ja noch nicht wie es geht :D.Vielen Dank!
-
steht unten das ich "x" ersetzen soll mit den parametern. Ich verstehe noch nicht ganz wie das gehen soll. Da ist kein "x".^^
Naja, die benötigten Parameter sind doch angegeben. Eine URL würde dann z.B. so aussehen: https://blockchain.info/de/tobtc?currency=EUR&value=100
Diese liest du dann einfach mit BinaryToString(InetRead(...)) aus und schon hast du das gewünschte Ergebnis. -
Ja danke. Das Problem ist nur das ich keine Ahnung von PHP/HTTP und dem ganzen Kram habe :). Ein bissel HTML kann ich aber nicht so gut als das ich das was du oben gepostet hast gekonnt hätte :).
-
Okay, das konvertiert mir jetzt aber nur einen gewünschten Betrag in BitCoin, auch cool, aber wie lese ich den aus dem ertsen Link auf der Seite sage ich mal den "last" (letzten) Kurs in EUR aus? Weil der obere Link gibt mir ja nur die Liste aus, also das ganze Schema da. Gibt es eine einfachere oder andere Methode als _StringBetween?
Edit:
_StringBetween gibt immer nur 0 zurück:#include <String.au3>
MsgBox(0, "Test", _GetCurrentStats("EUR", "last"))
;Get the current prices etc.
Func _GetCurrentStats($currency, $state) ;$state: {last|buy|sell|24h|symbol}
$source = BinaryToString(InetRead("http://blockchain.info/ticker", 1 + 16))Return _StringBetween($source, $currency&'" : {"last" : ', ', "buy"')
EndFunc -
Mit _StringBetween würde das so funktionieren:
#include <String.au3>
MsgBox(0, "Test", _GetCurrentStats("EUR", "last"))
;Get the current prices etc.
Func _GetCurrentStats($sCurrency, $sState) ;$state: {last|buy|sell|24h|symbol}
$sJSON = BinaryToString(InetRead("http://blockchain.info/ticker", 1))
$asResult = _StringBetween($sJSON, $sCurrency, "}")
$asResult = _StringBetween($asResult[0], $sState & '" : ', ",")
Return $asResult[0]
EndFuncDu könntest es natürlich mit RegEx versuchen, ist aber wahrscheinlich eher komplizierter als _StringBetween
-
Funktioniert! Mega Danke. Allerdings kann ich mir nicht das Symbol ausgeben lassen, dann kommt ein Error, ist aber wahrscheinlich auch nicht so wichtig :). Dennoch würde mich interessieren woran das liegt. Ich könnte mir vorstellen es liegt daran das BinaryToString() das ja in UTF-8 umwandelt und da gibts die Zeichen nicht oder? Ich kann mich auch total irren
-
Dazu musst du nur den 2. Parameter von BinaryToString auf 4 setzen.
Damit wird das ganze dann UTF-8 encodet. (Hierbei wird jedoch nur das letzte Symbol [THB] als Fragezeichen angezeigt, aber alles andere ist dann korrekt.)
Zusätzlich musst du noch die Funktion wenig umschreiben, damit du dir das Symbol ausgeben lassen kannst. Das wirst du wahrscheinlich selber auch sehen. -
Zitat
"C:\Users\Sascha\Documents\AutoIt Programme\BitCoin Gen\BitCoin Gen.au3" (10) : ==> Subscript used on non-accessible variable.:
Return $asResult[0]
Return $asResult^ ERROR#include <String.au3>
MsgBox(0, "Test", _GetCurrentStats("EUR", "symbol"))
;Get the current prices etc.
Func _GetCurrentStats($sCurrency, $sState) ;$state: {last|buy|sell|24h|symbol}
$sJSON = BinaryToString(InetRead("http://blockchain.info/ticker", 1), 4)
$asResult = _StringBetween($sJSON, $sCurrency, "}")
$asResult = _StringBetween($asResult[0], $sState & '" : ', ",")
Return $asResult[0]
EndFuncAnscheinend gibt der immernoch 0 zurück :/.
-
Natürlich, wie gesagt: Du musst die Funktion ein wenig abändern.
Das hier wäre eine Mögliche Variante:Func _GetCurrentStats($sCurrency, $sState)
; PainTain
$sJSON = BinaryToString(InetRead("http://blockchain.info/ticker", 1), 4)
$asResult = _StringBetween($sJSON, $sCurrency, "}"); Für die Erklärung des ternären Operators ?: siehe hier: http://www.autoitscript.com/au…docs/keywords/Ternary.htm
; $asResult = (($sState <> "symbol") ? _StringBetween($asResult[0], $sState & '" : ', ",") : _StringBetween($asResult[0], '"symbol" : "', '"'))
If ($sState <> "symbol") Then
_StringBetween($asResult[0], $sState & '" : ', ",")
Else
_StringBetween($asResult[0], '"symbol" : "', '"')Return $asResult[0]
EndFunc// Edit auf Wunsch alpines'
-
Poste lieber die Standardvariante ohne die neuen If-Verzweigungen, da die meisten die noch nicht verstehen.
-
Ah okay, weil am Ende ein anderes Zeichen ist, okay :).
Kannst du mir denn auch weiterhelfen wenn es darum geht wie ich "unbemerkt" auf Webseiten Buttons drücken kann und Inputs ausfüllen kann etc. Das mit der IE Geschichte ist ja schön und gut nur es funktioniert nicht.. Also die ganzen _IE Funktionen. Da gibt es ja auch keine die mir was ausfüllt oder dergleichen
-
_IEFormElementSetValue()
_IEGetObjById()
_IEGetObjByName()
_IEFormSubmit()
_IEAction()Macht das was du brauchst. Schau einfach in der Hilfe nach.
-
Ah okay, weil am Ende ein anderes Zeichen ist, okay :).
Kannst du mir denn auch weiterhelfen wenn es darum geht wie ich "unbemerkt" auf Webseiten Buttons drücken kann und Inputs ausfüllen kann etc. Das mit der IE Geschichte ist ja schön und gut nur es funktioniert nicht.. Also die ganzen _IE Funktionen. Da gibt es ja auch keine die mir was ausfüllt oder dergleichen
Schau dir am Besten diese _IE.. Funktionen mal an:; Damit kannst du dir "Handle" zu den einzelnen Form-Elementen holen, dazu musst du dir dazu den Quelltext der Seite anschauen
_IEGetObjByName
; bzw
_IEGetObjById; damit kannst du dann Werte setzen
_IEFormElementSetValue
_IEFormElementOptionSelect
_IEFormElementCheckboxSelect
_IEFormElementRadioSelect; und evtl. brauchst du noch
_IEFormElementGetValue
_IEImgClick
Schlag einfach mal all diese Funktion in der Hilfe nach, dazu gibt es sie ja schließlich.Und noch eine kleine Empfehlung zum Erlernen des Umgangs mit den diversen _IE.. Funktion: _IE_Example
-
Aber das funktioniert nur wenn du ein <form> element hast. Was bei dynamischen Seiten nicht der Fall ist. Und genau dafür brauche ich s auch :). Da kannst du nur mit der ID arbeiten.... Oder versteh ich das falsch?