Seite 1 von 1

Problem bei Automatisierung (Scrollen, Screenshot)

Verfasst: Freitag 2. April 2010, 20:30
von StampX
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!

Verfasst: Freitag 2. April 2010, 21:06
von philistion
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?

Verfasst: Freitag 2. April 2010, 21:09
von StampX
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ß

Verfasst: Freitag 2. April 2010, 21:17
von StampX
Wie ich gerade gelesen habe, gibt es WM_CLICK nicht. Ist an meiner Lösung für den Mausklick evtl. was falsch?

Verfasst: Freitag 2. April 2010, 21:34
von 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.

Verfasst: Freitag 2. April 2010, 21:41
von StampX
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...

Verfasst: Freitag 2. April 2010, 22:19
von StampX

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... :)

Verfasst: Samstag 3. April 2010, 07:03
von nemomuk
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.

Verfasst: Sonntag 4. April 2010, 21:30
von StampX
Hallo ahojnnes,

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

StampX