Problem bei Automatisierung (Scrollen, Screenshot)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
StampX
User
Beiträge: 6
Registriert: Freitag 2. April 2010, 19:19

Hallo,

ich habe ein Problem. Ich möchte gerne mit Python ein Script erstellen, dass automatisch einen Web-Browser öffnet, zu einer Seite navigiert, anschließend (falls nötig) bis zum Ende scrollt und bei jedem Scrollvorgang einen Screenshot macht. Anschließend sollen die einzelnen Screenshots von den Scrollvorgängen zu einem Screenshot zusammengefasst werden.

Was funktioniert?

- Browser öffnet sich [ok]
- URL wird aufgerufen [ok]
- Scrollen [NEIN]
- Screenshots werden erstellt [ok]
- Screenshot-Parts werden zu einem zusammengefügt [ok]

Generell funktioniert das Scrollen, was ich über PostMessage (win32api) gelöst habe. Das Problem hierbei ist, dass ich nach Öffnen des Browsers in die Seite klicken muss, damit gescrollt wird. Da das Script automatisch laufen soll, ist das natürlich nicht wirklich akzeptabel.

Beispiel:

Ich hole mir das Window-Handle des IE-Tabs, von dem der Screenshot erstellt werden soll. Dies klappt auch.

Getestet habe ich das Ganze so:

Code: Alles auswählen

win32gui.PostMessage(window, win32con.WM_CLOSE, 0, 0)
Woraufhin sich der Tab im IE schließt.

Gescrollt wird so:

Code: Alles auswählen

		
#win32gui.PostMessage(window, win32con.WM_CLOSE, 0, 0)
bits = 0x8000000 | 0x00030000 | key
win32gui.PostMessage(window, win32con.WM_KEYDOWN, key, bits)
win32gui.PostMessage(window, win32con.WM_KEYUP, key, bits)
time.sleep(0.1)
Das funktioniert wie gesagt ebenfalls, aber nur wenn ich nach dem Öffnen des Browsers in den (bereits aktiven) Tab klicke.

Ich habe mittlerweile den ganzen Tag daran rumprobiert und bekomme es einfach nicht automatisiert hin.

Ich wäre sehr dankbar für einen Vorschlag, damit ich dieses Problem endlich heben kann.

Vielen Dank im Voraus!
philistion
User
Beiträge: 108
Registriert: Sonntag 7. Februar 2010, 14:16

Es kann gut sein, dass man hier ein bisschen tricksen muss, genau nach diesem Prinzip versuchen ja auch Banking-Trojaner sich in die Steuerelemente des IE oder anderer Browser reinzuhängen.

Ein WM_CLICK irgendwo in den Bildschirmbereich zu schicken hast du schon probiert?
StampX
User
Beiträge: 6
Registriert: Freitag 2. April 2010, 19:19

Danke erst mal für deine Antwort...

Ich habe es bisher so versucht:

Code: Alles auswählen

lParam = (120 << 16) | 1
win32gui.SendMessage(handle.findWindow(), win32con.WM_LBUTTONDOWN, 0, lParam)
win32gui.SendMessage(handle.findWindow(), win32con.WM_LBUTTONUP, 0, lParam)
Leider ohne Erfolg. WM_CLICK wird ja nichts anderes machen, denke ich... Aber ich werde das gleich nochmal versuchen und melde mich dann erneut hier...

Gruß
StampX
User
Beiträge: 6
Registriert: Freitag 2. April 2010, 19:19

Wie ich gerade gelesen habe, gibt es WM_CLICK nicht. Ist an meiner Lösung für den Mausklick evtl. was falsch?
BlackJack

@StampX: Muss es denn unbedingt eine "fernsteuerlösung" mit Python sein? Es gibt für so etwas Browserplugins, beispielsweise FireShot für den Firefox.
StampX
User
Beiträge: 6
Registriert: Freitag 2. April 2010, 19:19

Ja das wäre schon gut, wenn es so funktionieren würde. FireShot und ähnliche Plugins sind mir bekannt, erfüllen nur nicht ganz den Zweck für mein Anliegen... Die Screenshots sollen später beispielsweise von kompletten Websites (mit Unterseiten) erstellt werden, was manuell doch etwas lange dauern würde bei größeren Seiten...

Nachtrag:

Ich habe übrigens gerade festgestellt, dass das Windows typische "pling-schon-wieder-ein-fehler"-Geräusch erklingt, sobald der simulierte Klick stattfindet. Könnte es evtl. einfach eine Sicherheitseinstellung sein, die ich irgendwie konfigurieren kann? Die Suche hat leider nichts erbracht...
StampX
User
Beiträge: 6
Registriert: Freitag 2. April 2010, 19:19

Code: Alles auswählen

win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
Damit hat's letztendlich doch geklappt. Vielen Dank trotzdem an euch beide... :)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Ist zwar eigentlich nicht dafür gemacht, aber was hältst du von Selenium? Damit öffnest du die Websites ganz unkompliziert und kannst dir danach den Screenshot erstellen.
StampX
User
Beiträge: 6
Registriert: Freitag 2. April 2010, 19:19

Hallo ahojnnes,

danke für Dein Interesse. Mittlerweile läuft mein Script problemlos. Trotzdem vielen Dank

StampX
Antworten