ilyputeot
Anmeldungsdatum: 5. März 2010
Beiträge: 14
|
Hallo alle zusammen, ich habe ein bash-Skript, dass eine Internetseite öffnet, und dann per xdotool einige Klicks ausführt und Felder ausfüllt. Das Problem ist, dass es sehr unterschiedlich lange dauert, bis die Seite geladen ist. Gibt es eine Möglichkeit, von Chromium eine Art Signal "Internetseite vollständig geladen" abzufangen? Im Moment nutze ich "sleep" - das ist aber lästig, weil sie mal viel zu lange wartet und mal nicht lange genug. Danke schon mal für Tipps.
|
Benno-007
Anmeldungsdatum: 28. August 2007
Beiträge: 29240
Wohnort: Germany
|
Ich würde die Last (grep, cut und dann vergleichen) oder das Ranking auswerten, ob es innerhalb der ersten Zeilen (head) in ▶ ps auftaucht. Wobei es da doch was in der man gibt:
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to
describe the state of a process:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
For BSD formats and when the stat keyword is used, additional characters may be displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group
Wobei das bei mir beim Seitenaufruf anscheinend auch sofort wieder/ noch auf S steht.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
ilyputeot schrieb:
ich habe ein bash-Skript, dass eine Internetseite öffnet, und dann per xdotool einige Klicks ausführt und Felder ausfüllt.
Warum brauchst Du denn den Browser dazu? Die erste Wahl wäre für mich, zu versuchen das ohne Browser zu machen. Da bieten sich an
Wenn Du den Browser brauchst, dann wäre vielleicht Watir etwas, damit kann man auf Ereignisse warten. Die Sache mit dem Prozesszustand finde ich etwas zu fragil. Ciao robert
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
In der Tat: falls Du mit Deinem Skript einen der üblichen graphischen Browser aufrufst, und dann dort per Maussimulation drin herumklickst, das ist eine ziemlich instabile Krücke ... Hast Du schon mal überlegt, die Formularabfrage direkt per curl oder ggf. auch wget direkt zu schicken ? Vor Zeiten hat Vain mal ein Beispiel gebracht, wie so etwas geht. Man müsste sich also die betreffende Seite daraufhin mal etwas genauer ansehen. Kannst Du uns die URL verraten, oder ist die vertraulich ? LG, track
|
TheDarkRose
Anmeldungsdatum: 28. Juli 2010
Beiträge: 3459
|
Warum sowas nicht mit Selenium automatisieren?
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
TheDarkRose schrieb: Warum sowas nicht mit Selenium automatisieren?
Weil: track schrieb: In der Tat: falls Du mit Deinem Skript einen der üblichen graphischen Browser aufrufst, und dann dort per Maussimulation drin herumklickst, das ist eine ziemlich instabile Krücke ...
|
TheDarkRose
Anmeldungsdatum: 28. Juli 2010
Beiträge: 3459
|
Ähm ne, Selenium ist dazu gedacht im Browser automatisiert herumzuklicken oder was einzugeben. Nur wählt man die Elemente nicht mittels X/Y-Koordinatenkrücke aus, sondern kann Elemente z.b. via CSS-Selektoren oder auch IIRC XPath auswählen und auf Ihnen somit arbeiten.
|
ilyputeot
(Themenstarter)
Anmeldungsdatum: 5. März 2010
Beiträge: 14
|
@Benno007 Die Idee kam mir auch schon. Leider funktioniert das mit dem Prozess-Status tatsächlich nicht. @rkim Watir klingt interessant, danke für den Tipp. Nur Ruby braucht wohl auch etwas Einarbeitung. @TheDarkRose Selenium kannte ich bisher nicht. Nur schade, dass es weder Watir noch Selenium in den Paketquellen gibt. @track Mit curl habe ich noch nicht gearbeitet. Wenn ich rkim richtig verstanden habe, dürfte ich damit also nicht chromium benutzen? Das müsste nämlich sein.
Es geht eigentlich nur um ein Spiel, dass ich aus (un)gesunder Paranoia im incognito-Modus von Chromium spiele und deshalb die Funktion "eingeloggt bleiben" nicht nutzen kann. Das heißt, ich muss immer die Seite http://de10.forgeofempires.com/ öffnen, meine Login-Daten eingeben, auf Spielen klicken und nochmal auf die Welt klicken. Keine große Sache also, aber auf Dauer nur nervig und außerdem eine schöne kleine Skript-Übung, bei der man ein bisschen was über den Computer lernt. Kann da curl weiterhelfen? Sieht mir nicht danach aus. An alle: Danke für die vielen Hinweise.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Guck Dir mal den Quelltext dieser Einstiegsseite an, und vergleich sie mit dem, was ich Dir oben verlinkt habe ! Du wirst sehen, dass der gesamte Anmeldeblock intern auch nur ein <form> HTML- Formular </form> ist, genau wie damals. Das heißt, Du kannst den kompletten Aufruf (der ± genau so aufgebaut ist wir der "drüben" !) z.B. als Lesezeichen speichern und dann als URL mit Deinem normalen Browser öffnen, und Du bist "drin". Den ganzen Kram mit dem Skript kannst Du Dir sparen, würde ich sagen. Was Du jetzt als Vorarbeit machen musst: den genauen Aufruf, mit allen Parametern herausfinden, damit Du den korrekten Aufruf eintragen kannst. Möglicherweise geht das auch einfacher, wenn Du mit wireshark einfach den HTML- Request direkt mitschneidest, und dann genau diesen Request an Deinen Browser verfütterst. Probier es mal ! LG, track
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
ilyputeot schrieb:
Das heißt, ich muss immer die Seite http://de10.forgeofempires.com/ öffnen, meine Login-Daten eingeben, auf Spielen klicken und nochmal auf die Welt klicken. Keine große Sache also, aber auf Dauer nur nervig und außerdem eine schöne kleine Skript-Übung, bei der man ein bisschen was über den Computer lernt.
In dem Fall würde ich eher nach so etwas wie Greasemonkey schauen, also im Browser skripten.
|
Mooi
Anmeldungsdatum: 15. August 2014
Beiträge: 187
|
ilyputeot schrieb:
Gibt es eine Möglichkeit, von Chromium eine Art Signal "Internetseite vollständig geladen" abzufangen? Ich würde es mit lsof (-i) versuchen. Das ist aber nur ein Schuss ins Blaue.
|
Benno-007
Anmeldungsdatum: 28. August 2007
Beiträge: 29240
Wohnort: Germany
|
Mooi schrieb:
Ich würde es mit lsof (-i) versuchen. Das ist aber nur ein Schuss ins Blaue.
Funktioniert im Moment des Abrufs. Zeigt die IPs und den Browser an, nicht schlecht. Ist aber sehr langsam.
|
ilyputeot
(Themenstarter)
Anmeldungsdatum: 5. März 2010
Beiträge: 14
|
@Mooi Super danke, sowas habe ich gesucht. @track Die curl-Methode in dem anderen Thread habe ich noch nicht geblickt. Vor allem wurde da ja eine html-Seite gespeichert. Ich muss ja online bleiben. Ich werde es mir aber noch mal anschauen, ob ich doch noch daraus schlau werde.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Das Entscheidende ist nicht, dass Du curl nehmen sollst, sondern dass Du exakt die selbe HTML- Abfrage nachbilden sollst, mit der Du beim Klick auf "[Spielen]" Dich einloggst. Dass Du also quasi das simulierst, was Du mit dem Ausfüllen des (HTML-) Anmeldeformulars dann an den Spieleserver schickst. An der Stelle schlage ich vor, den Hebel anzusetzen. Bei der ganzen Geschichte im verlinkten Strang damals geht es im Grunde nur darum, zu verstehen, wie so ein HTML- Formular funktioniert, damit Du die Abfrage auch korrekt zusammenbasteln kannst. Wenn Du das hast, ist es schnurzpiep egal, mit welchem Browser Du die Abfrage schickst. LG, track
|
TheDarkRose
Anmeldungsdatum: 28. Juli 2010
Beiträge: 3459
|
ilyputeot schrieb: Selenium kannte ich bisher nicht. Nur schade, dass es weder Watir noch Selenium in den Paketquellen gibt.
Braucht es auch nicht, ist nur ne simple .jar die man mit Java ausführt.
|