2009-07-15 5 views
1

Ich möchte die Archivierung der Daten auf dieser Seite http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx automatisieren und in eine Datenbank hochladen.Nach einem Javascript Postback mit COM + IE-Automatisierung zum Speichern von Textdatei

Ich habe Python und win32com (hinter einem Corporate Proxy, also keinen direkten Netzzugang, daher verwende ich IE, um dies zu tun) auf anderen Seiten, um dies zu tun. Meine Frage ist, ob es trotzdem die CSV-Daten extrahiert und speichert, die zurückgegeben werden, wenn Sie unten auf den Link "Hier klicken, um Daten herunterzuladen" klicken. Dieser Link ist ein JavaScript-Postback und wäre viel einfacher als die Neuformatierung der Seite in CSV.

. Natürlich bin ich nicht unbedingt verpflichtet, Python zu verwenden, wenn eine einfachere Alternative vorgeschlagen werden kann?

Dank

Antwort

1

Hier ist eine bessere Art und Weise, die mechanize Bibliothek.


import mechanize 

b = mechanize.Browser() 
b.set_proxies({'http': 'yourproxy.corporation.com:3128' }) 

b.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')] 
b.open("http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx") 

b.select_form(name="form1") 
b.form.find_control(name='__EVENTTARGET').readonly = False 
b.form['__EVENTTARGET'] = 'a1' 

print b.submit().read() 

Hinweis, wie Sie diese mechanize angeben kann, sollte einen Proxy-Server verwenden (auch Ebene urllib verwenden). Beachten Sie auch, wie ASP.NETs JavaScript-Postback simuliert wird.

Edit:

Wenn Ihr Proxy-Server NTLM-Authentifizierung verwendet, dass das Problem sein könnte. AFAIK urllib2 verarbeitet keine NTLM-Authentifizierung. Sie könnten versuchen, die NTLM Authorization Proxy Server. Vom readme file:


WAS IST 'NTLM Authorization Proxy Server'?

'NTLM Authorization Proxy Server' ist eine Proxy-ähnliche Software, die Ihnen bei MS-Proxy-Server und Web-Server (ISS vor allem) mit MS proprietärer NTLM Autorisierungsmethode wird genehmigen und es kann einige Werte in Ihren Kunden ändern Anfrage Kopfzeile , so dass diese Anfragen aussehen wie diejenigen von MS IE gemacht. Es ist in Python Sprache geschrieben. Siehe www.python.org.


+0

habe ich versucht, mit b.set_proxies ({ 'http': 'user: pass @ Proxy-Server: 80'}) als meine set_proxies string, aber diese Fehlermeldung erhalten: HTTP-Fehler 407: Proxy-Authentifizierung erforderlich (Der ISA Server benötigt eine Berechtigung, um die Anforderung zu erfüllen. Der Zugriff auf den Webproxy-Filter wird verweigert. Dies war der ursprüngliche Grund, warum ich für die Verwendung von COM + IE als Workaround dafür umgeschwenkt bin.Eine Idee, wie Sie dies umgehen können? Danke für Ihre Hilfe – Brendan

+0

Wenn Ihr Proxy-Server NTLM-Authentifizierung verwendet, könnte das das Problem sein.Ich habe meine Antwort mit einem Vorschlag zur Verwendung von NTLM Authorization Proxy Server aktualisiert - ein lokaler Proxy, der su wird zwischen NTLM und Basis-Authentifizierung übersetzen. Ich habe die Stammversion heruntergeladen und auf Python 2.5 getestet. Ein funktionierender Proxy. Ich habe keinen IAS-Proxy-Server mit NTLM für den Test verfügbar. – codeape