Programm --> Internetseite

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Peter-Michael

Hallo,

Ihr kennt doch bestimmt diese Eingabefelder, wie dieses wo ich grad reinschreiben. Sie haben meistens den html code:

Code: Alles auswählen

<input type=hidden>
Jetzt möchte ich gerne wissen, wie folgendes geht:

Ich gebe in meinem Python Programm einem Text in ein entry widget ein und klicke auf einen Button. Daraufhin sollte der Text aus dem entry widget in so ein Eingabefeld auf einer Homepage erscheinen. Danach sollte das Formular auf der Homepage noch abgeschickt werden! Also wie hier z. B. das Python-Programm fügt den Text hier in Nachrichtentext ein und klickt danach automatisch auf Absenden!

Danke schonmal!

Grüße,
Peter-Michael
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Peter-Michael,

direkt den Text in ein Eingabefeld zu übertragen ginge am einfachsten mit c&p. Allerdings glaube ich du willst was anderes.
Wenn Du auf einer Webseite ein Formular ausfüllst und auf den Absenden-Button klickst, wird der Inhalt der Eingabefelder an den Webserver geschickt. Praktisch kannst Du das Sender der Daten auch von einem Pythonscript auf Deinem Rechner machen lassen. Das 2. Beispiel auf http://www.python.org/doc/current/lib/h ... mples.html zeigt, wie die Parameter spam=1&eggs=2&bacon=0 an das cgi-script musi-cal.mojam.com//cgi-bin/query geschickt wird.


Gruß

Dookie
Peter-Michael

Danke erstmal Dookie! Wie geht denn das mit c&p?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. c&p bedeutet copy and paste, also kopieren und einfügen, was dann natürlich der Benutzer machen müsste. Da du ja aber nur eine HTTP-Anfage mit den Daten aus der GUI absenden willst, genügt die httplib von Python eigentlich vollauf. Die Input-Felder des HTML-Formulares werden als Dictionarey über die urllib gecoded:

wenn dein input im HTML so def. ist: <input name="text">, dann lautet der Dictionaryeintrag {"text":"eingabe_des_users_aus_der_GUI"}.
Peter-Michael

Sorry aber mir ist das noch nicht so ganz klar geworden wie ich das machen soll! Wie würde das denn gehen wenn ich bei http://dict.leo.org oben links was eingeben möchte?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Du simmulierst ganz einfach, dass du das HTML-Formular ausgefüllt hättest, und lässt die Anfrage über Python statt über einen Browser laufen. Natürlich musst du dann auch allen inputs Werte zuweisen, wobei es ersteinmal mühsehlig ist alle Inputs aus dem Quelltext rauszuholen. Ich hab das mal gemacht, vielleicht verstehst du es jetzt:

Code: Alles auswählen

import httplib,urllib

def gethtmldata(server='',page='',request_method='GET',params={},debug=0):
    params=urllib.urlencode(params)
    if debug: print server,page,request_method,params
    c=httplib.HTTPConnection(server)
    c.request(request_method,page,params)
    r=c.getresponse()
    c.close()
    if r.reason=="OK" and r.status==200:
        return r.read()
    return ""

suchtext="learn"
s={'search':suchtext, 
  'submit':'Search', 
  'searchLoc':'0', 
  'relink':'on', 
  'spellToler':'standard', 
  'sectHdr':'on', 
  'tableBorder':'1', 
  'cmpType':'relaxed', 
  'lang':'en'}
a=gethtmldata('dict.leo.org','/','POST',s,1)
Damit wird die ganze HTML-Antwort in a gespeichert. Ich glaube aber eher, du willst nur den Browser mit dem Suchtext aufrufen... das geht so hier schneller:

Code: Alles auswählen

import urllib,webbrowser
suchtext="learn"
s=urllib.urlencode({ 
  'search':suchtext, 
  'submit':'Search', 
  'searchLoc':'0', 
  'relink':'on', 
  'spellToler':'standard', 
  'sectHdr':'on', 
  'tableBorder':'1', 
  'cmpType':'relaxed', 
  'lang':'en'})
webbrowser.open_new('http://dict.leo.org/?%s'%s)
Tut mir leid, dass jetzt das Thema verzerrt wird, aber es gab wirklich so viele Inputs die alle mit rein mussten... ich habe es nicht hinbekommen, die sinnvoll in mehrere Zeilen zu schreiben.

EDIT nun ist es besser lesbar, weil nicht mehr verzerrt...
Zuletzt geändert von Milan am Samstag 24. Januar 2004, 20:22, insgesamt 2-mal geändert.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Ein Blick in den Source der Seite hat mir verraten, daß das CGI-Script die Daten mittels Get-Request erwartet. Das würde dann so gehen.

Code: Alles auswählen

import httplib, urllib

suche = "Python"

conn = httplib.HTTPConnection("dict.leo.org")
params = urllib.urlencode({"search": suche})
conn.request("GET", "?%s" % params)
r1 = conn.getresponse()

if r1.status != 200:
    raise  SystemExit("%i %s" % (r1.status, r1.reason))

data = r1.read()
conn.close
print data
data enthält dann die Seite die das Formular zurückliefert.


Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Tja, dass sagt zwar der Quelltext, aber er meinte es nicht ganz ernst. Ich hab es ausprobiert und ich hab nur die Startseite erhalten :wink: Außerdem sind die ganzen anderen Sachen radiobuttuns, die die Art und Weise der Übersetzung beeinflussen... :roll:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi Mlan,

es reicht auch nur den searchtext zu übergeben bei dieser seite. ansonst kannst Du Dein Dictionary auch so schreiben:

Code: Alles auswählen

s=urllib.urlencode({
    'search':suchtext,
    'submit':'Search',
    'searchLoc':'0',
    'relink':'on',
    'spellToler':'standard',
    'sectHdr':'on',
    'tableBorder':'1',
    'cmpType':'relaxed',
    'lang':'en'}) 
Gruß

Dookie
Peter-Michael

Hallo,

also ich habe das jetzt so verstanden, dass direkt das Script aufgerufen wird! Also würde ich bei dict.leo.org gleich das Suchergebnis bekommen. Ist das so richtig? Ich wollte das eigentlich so, dass ich das Ergebnis auch im Internet angezeigt bekommen; also nicht nur lokal. Wie z. B. bei einem webchat. Das Python-Programm fügt in die Eingabezeile den Text ein und schickt ihn ab, daraufhin soll er im Chat zu sehen sein! Geht das irgendwie genauso?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Da scheinst Du einen Denkfehler zu machen, bzw. eine falsche Vorstellung von dem Ganzen zu haben.
Wenn Du im Browser die Suchseite von dict.leo.org aufrufst, Dann ist das Formular auf deinem Rechner, nur die Beschreibung der Seite mit dem Formular kam vom Server. Wenn Du jetzt eine Eingabe machst, die dann vom Browser an den Server geschickt wird, wird dir die Beschreibung der Ergebnisseite vom Server auf deinen Rechner geschickt. Die Beschreibung wird dann gleich wieder vom Server vergessen.

Das was Du machen willst, geht nur mit CGI|PHP|Zope das dann auf dem Server ausgeführt wird.


Gruß

Dookie
Antworten