2009-10-12 5 views
21

Potrzebuję wypełnić wartości formularza na stronie docelowej, a następnie kliknąć przycisk w Pythonie. Spojrzałem na Selenium i Wiatrak, ale to są ramy testowe - nie testuję. Próbuję zalogować się na stronę innej firmy programowo, a następnie pobrać i przeanalizować plik, który musimy wstawić do naszej bazy danych. Problem ze strukturami testowymi polega na tym, że uruchamiają one instancje przeglądarek; Chcę tylko skrypt, który mogę zaplanować codziennie, aby pobrać żądaną stronę. Jakikolwiek sposób to zrobić?Wypełnianie wartości formularza na stronie internetowej za pomocą skryptu w języku Python (nie testowanie)

Odpowiedz

21

Szukasz Mechanize

formularza składającego próbki:

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

utknąłem przy użyciu Python 2.6 jednak tak smutno Mechanize nie jest opcja albo. (Wygląda na GopherError w wersji 2.6). – Habaabiai

+0

Mechanize doc jest zwykle trochę zwięzły, ale działa naprawdę świetnie! –

+0

Myślę, że powinieneś nalegać, spróbuj debugować problem z gopher. W pythonie 2.6 obsługa gopher została usunięta z IIRC, więc naprawienie problemu polega prawdopodobnie na komentowaniu niektórych importów gopherlib i kilku miejscach, w których faktycznie używa się gopher. –

3

Można użyć standardowego urllib biblioteki to zrobić tak:

import urllib 

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

Ten przykład Mechanize jak sugeruje wydaje pracować. W polach wejściowych, gdzie trzeba wprowadzić tekst, użyć czegoś takiego:

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

Jeśli niektóre treści są generowane po wysłaniu formularza, jak w wyszukiwarce, można dostać go za pośrednictwem:

print response.read() 
12

Have spojrzenie na tym przykładzie, które wykorzystują Mechanize: to daje podstawową ideę:

#!/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 
Powiązane problemy