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)
21
A
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
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
- 1. Dynamisch füllen Sie Formularwerte mit jQuery
- 2. Füllen Sie ein Javascript Grid über Flask
- 3. Wie testen Sie ein Greasemonkey-Skript, insbesondere auf einer lokalen Kopie einer Webseite?
- 4. Zugang zu den Formularwerte über JavaScript
- 5. PHP - AJAX - Formularwerte, die nicht über POST übergeben wurden
- 6. JUNIT Testfall zu testen Webseite
- 7. Formularwerte nicht gesendet, auf AJax zurückgesetzt
- 8. Wie ein Label.Text füllen - Objekt über jQuery
- 9. Ein Array in einer LinkedList füllen?
- 10. Füllen Sie ein Objekt in Golang
- 11. Erhalten Sie Formularwerte mit jquery
- 12. Senden Sie eine Webseite über Javascript
- 13. Wie programmgesteuert füllen Sie ein Formular aus und "POST" eine Webseite?
- 14. Füllen einer Datenbank in PostgreSQL
- 15. Füllen Sie ein Textfeld auf einer Website mit Ruby
- 16. Wie übertragen Sie Formularwerte von einer asp.net-Seite zu anderen?
- 17. So zentrieren Sie ein Footer div auf einer Webseite
- 18. So testen Sie POODLE über TLS?
- 19. Passing Formularwerte in einen Controller in Rails
- 20. Video über Link in einer ASP.Net-Webseite abspielen
- 21. Füllen Sie Webforms/Auto Login in AutoHotKey in Crome
- 22. Füllen Sie ein Formular beim Klicken aus?
- 23. Geschachtelte Formularwerte reagieren
- 24. So füllen Sie mehrere js-Datenressourcen in einer Anfrage
- 25. Überlagern Sie ein Bild über einer Tischzelle
- 26. in einer Webseite
- 27. Füllen Sie ein Aktionsblatt mit einem Array
- 28. Füllen Sie ein Textfeld auf einen Zugriff für über eine Funktion in der Ereignisprozedur des Formulars
- 29. Formularwerte nicht auf ASP MVC Ändern
- 30. Übergeben Sie Daten über ein Segment über eine Schaltfläche in einer Zelle ... Funktioniert nicht ...
ich bin fest mit Python 2.6 obwohl, so traurig Mechanize entweder keine Option ist. (GopherError fiel in 2,6, sieht aus wie). – Habaabiai
Mechanize Doc ist normalerweise ein bisschen knapp, aber es funktioniert wirklich sehr gut! –
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. –