Mit dem Mechanisierungsmodul von Perl scheint fast alles möglich zu sein. Aber ich verwende kein Perl, leider habe ich immer noch erwartet, dass ich mit Python das tun kann, was nötig ist. Die Anmeldeseite, die ich automatisieren muss, ist nicht direkt erreichbar. Die sichtbare URL im Browser enthält nicht das Webformular (und auch nichts, in Web 2.0-Manier handelt es sich nur um eine Reihe von XHR-Anfragen und integriertem Javascript), aber es gibt eine URL, an die ich mit Curl direkt posten kann. Die Dokumentation legt nahe, dass browser.open(url, data=whatever) eine intelligente Entscheidung treffen könnte, aber es scheint, dass es immer noch die GET-http-Methode verwendet. Oder es verwendet möglicherweise POST, führt aber application/x-www-form-urlencoded anstelle von json aus.
Der fragliche Code ist ziemlich einfach:
Code: Select all
r = br.open('https://major-retailer.com/api/client/experience/v1/load', data=json.dumps(j))
Dies führt lediglich dazu, dass ich eine generische Antwort auf eine fehlerhafte Anfrage erhalte:
Code: Select all
mechanize._response.get_seek_wrapper_class..httperror_seek_wrapper: HTTP Error 400: Bad Request
Ich kann dies mit Anfragen zum Laufen bringen, aber nur für diesen ersten Beitrag, danach wird es etwas zu aufwändig, Cookies und Referrer usw. zu verwalten. Das wenige, was ich über Python Mechanize finden kann, deutet darauf hin, dass es für anspruchsvolle Aufgaben möglicherweise nicht ausreicht, in der Hoffnung, dass dies nicht der Fall ist.