Seite 1 von 2
Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 14:16
von Flokass
Hallo,
ich möchte gerne ein Script schreiben dass ein Screenshot des aktuellen Bildschirms macht und an eine Webseite sendet (per POST).
Jetzt habe ich bereits ein modul namens frog gefunden dass eine funktion names snapshot hat - die das Bildschirmfoto macht (
frog.py Zeile 583).
Was muss ich jetzt tun? Bin ein python-neuling

Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 14:39
von BlackJack
@Flokass: Das Tutorial in der Python-Dokumentation durcharbeiten zum Beispiel.

Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 14:48
von Flokass
Da bin ich dabei.
Bin mittlerweile soweit:
Code: Alles auswählen
import frog
pool = Pool()
irfanpath = "C:\\Program Files\\IrfanView"
snapdict = pool.snapinfo(irfanpath)
success = False
if "gif" in snapdict["format"]:
filename = pool.snapshot("pool.gif",path=irfanpath)
else:
filename = pool.snapshot("pool.jpg",path=irfanpath)
if filename:
print("Screenshot gespeichert als Datei %s" %filename)
pool.ready()
Es kommt aber leider immer folgender Fehler:
Traceback (most recent call last):
File "C:\Users\*******\Desktop\********\cloudwin.py", line 3, in <module>
pool = Pool()
NameError: name 'Pool' is not defined
Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 14:51
von Hyperion
Was ist denn "Pool" für eine Klasse? Aus welchem Modul stammt sie?
Für Pfadangaben solltest Du Raw-Strings nutzen:
Damit handelst Du Dir keinen Escapin-Ärger ein.
Es gibt hier Python-Code-Tags! Damit hast Du Syntaxhighlighting. Außerdem stimmen Deine Einrückungen nicht!
Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 15:08
von /me
Flokass hat geschrieben:Es kommt aber leider immer folgender Fehler:
Traceback (most recent call last):
File "C:\Users\*******\Desktop\********\cloudwin.py", line 3, in <module>
pool = Pool()
NameError: name 'Pool' is not defined
Tja, wo soll er auch herkommen der Pool? Ein Blick in den Code von frog.py zeigt mir, dass es dort eine Klasse namens Pool gibt. Dein Code müsste also eher wie folgt aussehen:
oder
Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 15:59
von Flokass
Vielen Dank!
Der Fehler ist weg. Ich habe jetzt:
Code: Alles auswählen
import frog
from frog import Pool
pool = Pool()
irfanpath = r"C:\Program Files\IrfanView"
snapdict = pool.snapinfo(irfanpath)
success = False
if "gif" in snapdict["format"]:
filename = pool.snapshot("pool.gif",path=irfanpath)
else:
filename = pool.snapshot("pool.jpg",path=irfanpath)
if filename:
print("Screenshot gespeichert als Datei %s" %filename)
pool.ready()
Ergibt:
Screenshot gespeichert als Datei pool.gif
Jetzt muss ich es hinbekommen dass er das ganze an eine Webadresse sendet. Bisher habe ich nur etwas gefunden wie man den Standartwebbrowser öffnet der dazu nach möglichkeit auch verwendet werden soll. Allerdings wäre es auch etwas ein kleines Fenster anzuzeigen indem der Internet Explorer eingebunden ist.
So also hiermit kann man einen Browser öffnen:
Code: Alles auswählen
import webbrowser
webbrowser.open('http://google.com')
Nun ist die Frage ob es möglich ist mit dem Befehl auch das entsprechende Bild per POST mitzugeben. Ich denke nein. Also muss ich wahrscheinlich den IE einbetten oder?
Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 16:11
von DaMutz
einen Webbrowser musst du nicht einbetten. Die
urllib2 sollte eigentlich reichen.
Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 16:20
von Flokass
kannst du mir sagen wie der code sein muss damit er an eine webseite das bild sendet?
Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 17:23
von Hyperion
Flokass hat geschrieben:kannst du mir sagen wie der code sein muss damit er an eine webseite das bild sendet?
Guck doch einfach in die Doku! Da gibts iirc auch viele schöne Beispiele!
Re: Screenshot machen und hochladen
Verfasst: Sonntag 18. Juli 2010, 18:05
von Flokass
Ja, ich weiß
hier gibts einige Beispiele. Aber leider kann ich damit nicht viel anfangen.
Also soweit bin ich:
Code: Alles auswählen
import urllib2
req = urllib2.Request('http://www.example.com/')
# hier
r = urllib2.urlopen(req)
Dort wo "hier" steht muss denke ich mal jetzt das Bild per POST rein oder? Ich gehe mal davon aus. Wie mache ich das jetzt genau?
Hier steht was von add_data(
data)... Weiter komme ich leider nicht

Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 11:48
von Flokass
Okay mittlerweile bin ich so weit:
Code: Alles auswählen
import frog
from frog import Pool
pool = Pool()
irfanpath = r"C:\Program Files\IrfanView"
snapdict = pool.snapinfo(irfanpath)
success = False
if "gif" in snapdict["format"]:
filename = pool.snapshot("pool.gif",path=irfanpath)
else:
filename = pool.snapshot("pool.jpg",path=irfanpath)
if filename:
print("Screenshot gespeichert als Datei %s" %filename)
pool.ready()
import urllib2
req = urllib2.urlopen('http://example.com')
# hier
r = urllib2.urlopen(req)
print r.read()
Das macht halt a) das Screenshot und speichert es in der pool.gif ab und stellt b) eine Verbindung zu example.com her und gibt dann alles wieder was dort steht. Jetzt muss ich aber noch ein was wissen: wie mache ich es jetzt dass er die pool.gif anhängt per POST? Das habe ich leider nicht geschafft

Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 11:55
von Hyperion
Ich hatte es zwar schon erwähnt, aber noch einmal:
Es gibt eine spezielle Code-Formatierung für Python [ python]Dein Code [ /python] oder auch [ code=py] ... [ /code]; ohne die führenden Leerzeichen natürlich. Für ersteres gibts sogar einen extra Button
Deine Einrückungen stimmen so nicht (if... else-Teile)!
Schau Dir doch mal in der Doku zur urllib2 die Beispiele 2 und 3 an. Das sollte es doch sein denke ich mal. Alternativ kommt man ggf. auch mit der httplib weiter.
Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 12:42
von Flokass
Ohh - habe meine Beiträge mal geändert.
Ich schaue mir jetzt nochmal die Beispiele an...
Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 12:56
von Hyperion
Laut PEP8 sind die Einrückungen bei Python 4 Spaces

Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 14:24
von Flokass
Okay also jetzt bin ich total verwirrt. Also der Sinn der Sache ist dass ich vorerst irgendetwas; später dann das Bild an dieses PHP-Script sende:
Code: Alles auswählen
<?php
if($_POST["data"] == $null) {echo "nichts"; }
else{ echo "etwas"; }
?>
Das ist ein Test ob es geht. Also muss ich jetzt in die Post-Variable "data" irgendetwas senden. Wie mache ich das? Habe mein Script momentan wie folgt aufgebaut aber leider kommt immer "nichts" zurück.
Code: Alles auswählen
import urllib2
req = urllib2.Request(url='http://example.com/script.php',
data='irgendetwas')
r = urllib2.urlopen(req)
print r.read()
Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 15:03
von Flokass
Bin mittlerweile weiter gekommen.
Code: Alles auswählen
import urllib2
import urllib
req = urllib2.Request(url='http://example.com/script.php',
data=urllib.urlencode({"data": "irgendetwas"}))
# hier
r = urllib2.urlopen(req)
print r.read()
Soo jetzt bin ich gerade dabei zu versuchen die Datei pool.gif anstatt von "irgendetwas" zu senden.
Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 21:25
von Flokass
Wie kann ich die Datei jetzt in den POST rein tun anstelle von dem "irgendetwas"? Habe es leider nicht geschafft :/
Re: Screenshot machen und hochladen
Verfasst: Montag 19. Juli 2010, 22:33
von Leonidas
Naja, du musst die Datei öffnen und den Inhalt auslesen... wie das geht steht in jedem Tutorial.
Re: Screenshot machen und hochladen
Verfasst: Dienstag 20. Juli 2010, 00:10
von Flokass
Danke, werde ich mir morgen mal ansehen!
Re: Screenshot machen und hochladen
Verfasst: Dienstag 20. Juli 2010, 00:23
von Shaldy
Da bekommt man echt Augenkrebs.
Entweder du schreibst
ODER du schreibst
Darf ich fragen, wo du das Modul her hast? Das hat mein Mathelehrer geschrieben
