Python und mechanize-login-Skript
Hallo fellow Programmierer!
Ich versuche, ein Skript zu schreiben login in " meine Universitäten "food balance" - Seite mit python und mechanize Modul...
Dies ist die Seite, die ich versuche zu log-in: http://www.wcu.edu/11407.asp
Die website verfügt über Folgendes Formular anmelden:
<FORM method=post action=https://itapp.wcu.edu/BanAuthRedirector/Default.aspx><INPUT value=https://cf.wcu.edu/busafrs/catcard/idsearch.cfm type=hidden name=wcuirs_uri>
<P><B>WCU ID Number<BR></B><INPUT maxLength=12 size=12 type=password name=id> </P>
<P><B>PIN<BR></B><INPUT maxLength=20 type=password name=PIN> </P>
<P></P>
<P><INPUT value="Request Access" type=submit name=submit> </P></FORM>
Wir wissen, dass ich brauchen, um füllen Sie die folgenden Felder:
1. name=id
2. name=PIN -
Mit der Aktion: action=https://itapp.wcu.edu/BanAuthRedirector/Default.aspx
Dies ist das Skript, das ich geschrieben habe, so weit:
#!/usr/bin/python2 -W ignore
import mechanize, cookielib
from time import sleep
url = 'http://www.wcu.edu/11407.asp'
myId = '11111111111'
myPin = '22222222222'
# Browser
#br = mechanize.Browser()
#br = mechanize.Browser(factory=mechanize.DefaultFactory(i_want_broken_xhtml_support=True))
br = mechanize.Browser(factory=mechanize.RobustFactory()) # Use this because of bad html tags in the html...
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# User-Agent (fake agent to google-chrome linux x86_64)
br.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'),
('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
('Accept-Encoding', 'gzip,deflate,sdch'),
('Accept-Language', 'en-US,en;q=0.8'),
('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]
# The site we will navigate into
br.open(url)
# Go though all the forms (for debugging only)
for f in br.forms():
print f
# Select the first (index two) form
br.select_form(nr=2)
# User credentials
br.form['id'] = myId
br.form['PIN'] = myPin
br.form.action = 'https://itapp.wcu.edu/BanAuthRedirector/Default.aspx'
# Login
br.submit()
# Wait 10 seconds
sleep(10)
# Save to a file
f = file('mycatpage.html', 'w')
f.write(br.response().read())
f.close()
Nun das problem...
Für einige ungerade Grund, die Seite habe ich wieder (in mycatpage.html) ist die login-Seite und nicht die erwartete Seite angezeigt meine "Katze cash balance" und "Anzahl von block-Mahlzeiten" Links...
Hat jemand eine Idee warum? Beachten Sie, dass alles korrekt ist mit den header-Dateien und zwar die id und pass sind nicht wirklich 111111111 und 222222222, die richtigen Werte tun, die Arbeit mit der website (mithilfe eines Browsers...)
Vielen Dank im Voraus
BEARBEITEN
Einem anderen Skript habe ich versucht:
from urllib import urlopen, urlencode
import urllib2
import httplib
url = 'https://itapp.wcu.edu/BanAuthRedirector/Default.aspx'
myId = 'xxxxxxxx'
myPin = 'xxxxxxxx'
data = {
'id':myId,
'PIN':myPin,
'submit':'Request Access',
'wcuirs_uri':'https://cf.wcu.edu/busafrs/catcard/idsearch.cfm'
}
opener = urllib2.build_opener()
opener.addheaders = [('User-agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'),
('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
('Accept-Encoding', 'gzip,deflate,sdch'),
('Accept-Language', 'en-US,en;q=0.8'),
('Accept-Charset', 'ISO-8859-1,utf-8;q=0.7,*;q=0.3')]
request = urllib2.Request(url, urlencode(data))
open("mycatpage.html", 'w').write(opener.open(request))
Dieser hat das gleiche Verhalten...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, das ist das problem Linie.
Versuchen Sie es zu
Ich bin mir auch ziemlich sicher, dass Sie nicht brauchen
br.form.action = 'https://itapp.wcu.edu/BanAuthRedirector/Default.aspx'
weil Sie zuvor markiert haben, die form also nur zum telefonieren reichen sollte funktionieren, aber ich könnte falsch sein.Zusätzlich, ich habe eine ähnliche Aufgabe nur mit das urllib und urllib2, so sollte dies nicht funktionieren, werde ich nach diesem code.
Edit: hier ist die Technik, die ich verwendet mit das urllib und urllib2:
Edit 2:
Könnte dies das problem sein? Sicher nicht.
Edit 3:
Verwendet eine html-inspector, ich denke, es gibt eine gute chance, die Sie benötigen, um 'wcuirs_uir' zu 'https://cf.wcu.edu/busafrs/catcard/idsearch.cfm'. Ich bin mir zu 95% sicher dass es funktionieren wird.
Schlage ich die folgende Bibliothek: http://docs.python-requests.org/en/latest/
Es ist einfach und schön-Bibliothek. Es hat eine gute Dokumentation. Ich habe verwendet diese Bibliothek, um unterschiedliche Art von scripting, wie die, die Sie tun.
Müssen Sie etwas tun, wie dieses:
Können Sie mehr info hier
Andere Lösung, die ich verwendet habe, in Unordnung w/ASPX ist robobrowser.
Beispiel:
Hinweis: Sie müssen möglicherweise aktualisieren Sie das Formular zum hinzufügen versteckt Formularfelder wie
__VIEWSTATE
und Freunde, um das Formular vor dem Absenden. Sehen diese post für weitere Infos.