2009-10-12 2 views
21

Ich muss Formularwerte auf einer Zielseite ausfüllen und klicken Sie dann auf eine Schaltfläche über Python. Ich habe mir Selenium und Windmill angeschaut, aber das sind Test-Frameworks - ich teste nicht. Ich versuche, mich programmatisch bei einer Drittanbieter-Website anzumelden und dann eine Datei herunterzuladen und zu analysieren, die wir in unsere Datenbank einfügen müssen. Das Problem mit den Test-Frameworks ist, dass sie Instanzen von Browsern starten; Ich möchte nur ein Skript, das ich täglich ausführen kann, um die gewünschte Seite abzurufen. Irgendeine Möglichkeit, dies zu tun?Füllen Sie Formularwerte in einer Webseite über ein Python-Skript (nicht testen)

Antwort

21

Sie suchen Mechanize

Formular Beispiel:

import re 
from mechanize import Browser 

br = Browser() 
br.open("http://www.example.com/") 
br.select_form(name="order") 
# Browser passes through unknown attributes (including methods) 
# to the selected HTMLForm (from ClientForm). 
br["cheeses"] = ["mozzarella", "caerphilly"] # (the method here is __setitem__) 
response = br.submit() # submit current form 
+0

ich bin fest mit Python 2.6 obwohl, so traurig Mechanize entweder keine Option ist. (GopherError fiel in 2,6, sieht aus wie). – Habaabiai

+0

Mechanize Doc ist normalerweise ein bisschen knapp, aber es funktioniert wirklich sehr gut! –

+0

Ich denke, Sie sollten darauf bestehen, versuchen Sie das Gopher-Problem zu debuggen. In Python 2.6 wurde die Gopher-Unterstützung von IIRC entfernt, daher besteht das Problem darin, einige Import-Gopherlibs und die wenigen Stellen, an denen Gopher tatsächlich verwendet wird, zu kommentieren. –

3

Sie die Standard-urllib Bibliothek verwenden kann dies so wie zu tun:

import urllib 

urllib.urlretrieve("http://www.google.com/", "somefile.html", lambda x,y,z:0, urllib.urlencode({"username": "xxx", "password": "pass"})) 
1

Das Mechanize Beispiel scheint, als vorgeschlagen arbeiten. In Eingabefeldern, wo Sie Text eingeben müssen, verwenden Sie so etwas wie:

br["kw"] = "rowling" # (the method here is __setitem__) 

Wenn einige Inhalte erzeugt wird, nachdem Sie das Formular abschicken, wie in einer Suchmaschine, erhalten Sie es über:

print response.read() 
12

Haben ein Blick auf dieses Beispiel, dasMechanize verwenden: es wird die grundlegende Idee geben:

#!/usr/bin/python 
import re 
from mechanize import Browser 
br = Browser() 

# Ignore robots.txt 
br.set_handle_robots(False) 
# Google demands a user-agent that isn't a robot 
br.addheaders = [('User-agent', 'Firefox')] 

# Retrieve the Google home page, saving the response 
br.open("http://google.com") 

# Select the search box and search for 'foo' 
br.select_form('f') 
br.form[ 'q' ] = 'foo' 

# Get the search results 
br.submit() 

# Find the link to foofighters.com; why did we run a search? 
resp = None 
for link in br.links(): 
    siteMatch = re.compile('www.foofighters.com').search(link.url) 
    if siteMatch: 
     resp = br.follow_link(link) 
     break 

# Print the site 
content = resp.get_data() 
print content 
Verwandte Themen